@dynamicforms/vuetify-inputs 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamicforms-vuetify-inputs.umd.cjs","sources":["../node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js","../node_modules/@ckeditor/ckeditor5-vue/dist/ckeditor.js","../src/helpers/input-base.ts","../src/helpers/input-base.vue","../src/helpers/action/action-display-style.ts","../src/helpers/action/responsive-render-options.ts","../src/helpers/action/action.ts","../src/df-actions.vue","../src/df-checkbox.vue","../src/df-color.vue","../src/df-datetime.vue","../src/df-file.vue","../src/df-input.vue","../src/helpers/ck-editor-custom.vue","../src/df-rtf-editor.vue","../src/helpers/df-select.helper.ts","../src/df-select.vue","../src/df-text-area.vue","../src/index.ts"],"sourcesContent":["/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createDefer() {\n const deferred = {\n resolve: null,\n promise: null\n };\n deferred.promise = new Promise((resolve) => {\n deferred.resolve = resolve;\n });\n return deferred;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction waitFor(callback, {\n timeOutAfter = 500,\n retryAfter = 100\n} = {}) {\n return new Promise((resolve, reject) => {\n const startTime = Date.now();\n let lastError = null;\n const timeoutTimerId = setTimeout(() => {\n reject(lastError ?? new Error(\"Timeout\"));\n }, timeOutAfter);\n const tick = async () => {\n try {\n const result = await callback();\n clearTimeout(timeoutTimerId);\n resolve(result);\n } catch (err) {\n lastError = err;\n if (Date.now() - startTime > timeOutAfter) {\n reject(err);\n } else {\n setTimeout(tick, retryAfter);\n }\n }\n };\n tick();\n });\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst INJECTED_SCRIPTS = /* @__PURE__ */ new Map();\nfunction injectScript(src, { attributes } = {}) {\n if (INJECTED_SCRIPTS.has(src)) {\n return INJECTED_SCRIPTS.get(src);\n }\n const maybePrevScript = document.querySelector(`script[src=\"${src}\"]`);\n if (maybePrevScript) {\n console.warn(`Script with \"${src}\" src is already present in DOM!`);\n maybePrevScript.remove();\n }\n const promise = new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.onerror = reject;\n script.onload = () => {\n resolve();\n };\n for (const [key, value] of Object.entries(attributes || {})) {\n script.setAttribute(key, value);\n }\n script.setAttribute(\"data-injected-by\", \"ckeditor-integration\");\n script.type = \"text/javascript\";\n script.async = true;\n script.src = src;\n document.head.appendChild(script);\n const observer = new MutationObserver((mutations) => {\n const removedNodes = mutations.flatMap((mutation) => Array.from(mutation.removedNodes));\n if (removedNodes.includes(script)) {\n INJECTED_SCRIPTS.delete(src);\n observer.disconnect();\n }\n });\n observer.observe(document.head, {\n childList: true,\n subtree: true\n });\n });\n INJECTED_SCRIPTS.set(src, promise);\n return promise;\n}\nasync function injectScriptsInParallel(sources, props) {\n await Promise.all(\n sources.map((src) => injectScript(src, props))\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst INJECTED_STYLESHEETS = /* @__PURE__ */ new Map();\nfunction injectStylesheet({\n href,\n placementInHead = \"start\",\n attributes = {}\n}) {\n if (INJECTED_STYLESHEETS.has(href)) {\n return INJECTED_STYLESHEETS.get(href);\n }\n const maybePrevStylesheet = document.querySelector(`link[href=\"${href}\"][rel=\"stylesheet\"]`);\n if (maybePrevStylesheet) {\n console.warn(`Stylesheet with \"${href}\" href is already present in DOM!`);\n maybePrevStylesheet.remove();\n }\n const appendLinkTagToHead = (link) => {\n const previouslyInjectedLinks = Array.from(\n document.head.querySelectorAll('link[data-injected-by=\"ckeditor-integration\"]')\n );\n switch (placementInHead) {\n case \"start\":\n if (previouslyInjectedLinks.length) {\n previouslyInjectedLinks.slice(-1)[0].after(link);\n } else {\n document.head.insertBefore(link, document.head.firstChild);\n }\n break;\n case \"end\":\n document.head.appendChild(link);\n break;\n }\n };\n const promise = new Promise((resolve, reject) => {\n const link = document.createElement(\"link\");\n for (const [key, value] of Object.entries(attributes || {})) {\n link.setAttribute(key, value);\n }\n link.setAttribute(\"data-injected-by\", \"ckeditor-integration\");\n link.rel = \"stylesheet\";\n link.href = href;\n link.onerror = reject;\n link.onload = () => {\n resolve();\n };\n appendLinkTagToHead(link);\n const observer = new MutationObserver((mutations) => {\n const removedNodes = mutations.flatMap((mutation) => Array.from(mutation.removedNodes));\n if (removedNodes.includes(link)) {\n INJECTED_STYLESHEETS.delete(href);\n observer.disconnect();\n }\n });\n observer.observe(document.head, {\n childList: true,\n subtree: true\n });\n });\n INJECTED_STYLESHEETS.set(href, promise);\n return promise;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isSSR() {\n return typeof window === \"undefined\";\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction once(fn) {\n let lastResult = null;\n return (...args) => {\n if (!lastResult) {\n lastResult = {\n current: fn(...args)\n };\n }\n return lastResult.current;\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction overwriteArray(source, destination) {\n destination.length = 0;\n destination.push(...source);\n return destination;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction overwriteObject(source, destination) {\n for (const prop of Object.getOwnPropertyNames(destination)) {\n delete destination[prop];\n }\n for (const [key, value] of Object.entries(source)) {\n if (value !== destination && key !== \"prototype\" && key !== \"__proto__\") {\n destination[key] = value;\n }\n }\n return destination;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction preloadResource(url, { attributes } = {}) {\n if (document.head.querySelector(`link[href=\"${url}\"][rel=\"preload\"]`)) {\n return;\n }\n const link = document.createElement(\"link\");\n for (const [key, value] of Object.entries(attributes || {})) {\n link.setAttribute(key, value);\n }\n link.setAttribute(\"data-injected-by\", \"ckeditor-integration\");\n link.rel = \"preload\";\n link.as = detectTypeOfResource(url);\n link.href = url;\n document.head.insertBefore(link, document.head.firstChild);\n}\nfunction detectTypeOfResource(url) {\n switch (true) {\n case /\\.css$/.test(url):\n return \"style\";\n case /\\.js$/.test(url):\n return \"script\";\n default:\n return \"fetch\";\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction shallowCompareArrays(a, b) {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst HEX_NUMBERS = new Array(256).fill(\"\").map((_, index) => (\"0\" + index.toString(16)).slice(-2));\nfunction uid() {\n const [r1, r2, r3, r4] = crypto.getRandomValues(new Uint32Array(4));\n return \"e\" + HEX_NUMBERS[r1 >> 0 & 255] + HEX_NUMBERS[r1 >> 8 & 255] + HEX_NUMBERS[r1 >> 16 & 255] + HEX_NUMBERS[r1 >> 24 & 255] + HEX_NUMBERS[r2 >> 0 & 255] + HEX_NUMBERS[r2 >> 8 & 255] + HEX_NUMBERS[r2 >> 16 & 255] + HEX_NUMBERS[r2 >> 24 & 255] + HEX_NUMBERS[r3 >> 0 & 255] + HEX_NUMBERS[r3 >> 8 & 255] + HEX_NUMBERS[r3 >> 16 & 255] + HEX_NUMBERS[r3 >> 24 & 255] + HEX_NUMBERS[r4 >> 0 & 255] + HEX_NUMBERS[r4 >> 8 & 255] + HEX_NUMBERS[r4 >> 16 & 255] + HEX_NUMBERS[r4 >> 24 & 255];\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction uniq(source) {\n return Array.from(new Set(source));\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nasync function waitForWindowEntry(entryNames, config) {\n const tryPickBundle = () => entryNames.map((name) => window[name]).filter(Boolean)[0];\n return waitFor(\n () => {\n const result = tryPickBundle();\n if (!result) {\n throw new Error(`Window entry \"${entryNames.join(\",\")}\" not found.`);\n }\n return result;\n },\n config\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction filterObjectValues(obj, filter) {\n const filteredEntries = Object.entries(obj).filter(([key, value]) => filter(value, key));\n return Object.fromEntries(filteredEntries);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction filterBlankObjectValues(obj) {\n return filterObjectValues(\n obj,\n (value) => value !== null && value !== void 0\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction mapObjectValues(obj, mapper) {\n const mappedEntries = Object.entries(obj).map(([key, value]) => [key, mapper(value, key)]);\n return Object.fromEntries(mappedEntries);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction without(itemsToRemove, items) {\n return items.filter((item) => !itemsToRemove.includes(item));\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction appendExtraPluginsToEditorConfig(config, plugins) {\n const extraPlugins = config.extraPlugins || [];\n return {\n ...config,\n extraPlugins: [\n ...extraPlugins,\n ...plugins.filter((item) => !extraPlugins.includes(item))\n ]\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isSemanticVersion(version) {\n return !!version && /^\\d+\\.\\d+\\.\\d+/.test(version);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isCKCdnTestingVersion(version) {\n if (!version) {\n return false;\n }\n return [\"nightly\", \"alpha\", \"internal\", \"nightly-\", \"staging\"].some((testVersion) => version.includes(testVersion));\n}\nfunction isCKCdnVersion(version) {\n return isSemanticVersion(version) || isCKCdnTestingVersion(version);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction destructureSemanticVersion(version) {\n if (!isSemanticVersion(version)) {\n throw new Error(`Invalid semantic version: ${version || \"<blank>\"}.`);\n }\n const [major, minor, patch] = version.split(\".\");\n return {\n major: Number.parseInt(major, 10),\n minor: Number.parseInt(minor, 10),\n patch: Number.parseInt(patch, 10)\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getLicenseVersionFromEditorVersion(version) {\n if (isCKCdnTestingVersion(version)) {\n return 3;\n }\n const { major } = destructureSemanticVersion(version);\n switch (true) {\n case major >= 44:\n return 3;\n case major >= 38:\n return 2;\n default:\n return 1;\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getCKBaseBundleInstallationInfo() {\n const { CKEDITOR_VERSION, CKEDITOR } = window;\n if (!isCKCdnVersion(CKEDITOR_VERSION)) {\n return null;\n }\n return {\n source: CKEDITOR ? \"cdn\" : \"npm\",\n version: CKEDITOR_VERSION\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getSupportedLicenseVersionInstallationInfo() {\n const installationInfo = getCKBaseBundleInstallationInfo();\n if (!installationInfo) {\n return null;\n }\n return getLicenseVersionFromEditorVersion(installationInfo.version);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isCKEditorFreeLicense(licenseKey, licenseVersion) {\n licenseVersion ||= getSupportedLicenseVersionInstallationInfo() || void 0;\n switch (licenseVersion) {\n case 1:\n case 2:\n return licenseKey === void 0;\n case 3:\n return licenseKey === \"GPL\";\n default: {\n return false;\n }\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createIntegrationUsageDataPlugin(integrationName, usageData) {\n return function IntegrationUsageDataPlugin(editor) {\n if (isCKEditorFreeLicense(editor.config.get(\"licenseKey\"))) {\n return;\n }\n editor.on(\"collectUsageData\", (source, { setUsageData }) => {\n setUsageData(`integration.${integrationName}`, usageData);\n });\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst CK_CDN_URL = \"https://cdn.ckeditor.com\";\nfunction createCKCdnUrl(bundle, file, version) {\n return `${CK_CDN_URL}/${bundle}/${version}/${file}`;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst CKBOX_CDN_URL = \"https://cdn.ckbox.io\";\nfunction createCKBoxCdnUrl(bundle, file, version) {\n return `${CKBOX_CDN_URL}/${bundle}/${version}/${file}`;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst CK_DOCS_URL = \"https://ckeditor.com/docs/ckeditor5\";\nfunction createCKDocsUrl(path, version = \"latest\") {\n return `${CK_DOCS_URL}/${version}/${path}`;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createCKCdnBaseBundlePack({\n version,\n translations,\n createCustomCdnUrl = createCKCdnUrl\n}) {\n const urls = {\n scripts: [\n // Load the main script of the base features.\n createCustomCdnUrl(\"ckeditor5\", \"ckeditor5.umd.js\", version),\n // Load all JavaScript files from the base features.\n // EN bundle is prebuilt into the main script, so we don't need to load it separately.\n ...without([\"en\"], translations || []).map(\n (translation) => createCustomCdnUrl(\"ckeditor5\", `translations/${translation}.umd.js`, version)\n )\n ],\n stylesheets: [\n createCustomCdnUrl(\"ckeditor5\", \"ckeditor5.css\", version)\n ]\n };\n return {\n // Preload resources specified in the pack, before loading the main script.\n preload: [\n ...urls.stylesheets,\n ...urls.scripts\n ],\n scripts: [\n // It's safe to load translations and the main script in parallel.\n async (attributes) => injectScriptsInParallel(urls.scripts, attributes)\n ],\n // Load all stylesheets of the base features.\n stylesheets: urls.stylesheets,\n // Pick the exported global variables from the window object.\n checkPluginLoaded: async () => waitForWindowEntry([\"CKEDITOR\"]),\n // Check if the CKEditor base bundle is already loaded and throw an error if it is.\n beforeInject: () => {\n const installationInfo = getCKBaseBundleInstallationInfo();\n switch (installationInfo?.source) {\n case \"npm\":\n throw new Error(\n \"CKEditor 5 is already loaded from npm. Check the migration guide for more details: \" + createCKDocsUrl(\"updating/migration-to-cdn/vanilla-js.html\")\n );\n case \"cdn\":\n if (installationInfo.version !== version) {\n throw new Error(\n `CKEditor 5 is already loaded from CDN in version ${installationInfo.version}. Remove the old <script> and <link> tags loading CKEditor 5 to allow loading the ${version} version.`\n );\n }\n break;\n }\n }\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createCKCdnPremiumBundlePack({\n version,\n translations,\n createCustomCdnUrl = createCKCdnUrl\n}) {\n const urls = {\n scripts: [\n // Load the main script of the premium features.\n createCustomCdnUrl(\"ckeditor5-premium-features\", \"ckeditor5-premium-features.umd.js\", version),\n // Load all JavaScript files from the premium features.\n // EN bundle is prebuilt into the main script, so we don't need to load it separately.\n ...without([\"en\"], translations || []).map(\n (translation) => createCustomCdnUrl(\"ckeditor5-premium-features\", `translations/${translation}.umd.js`, version)\n )\n ],\n stylesheets: [\n createCustomCdnUrl(\"ckeditor5-premium-features\", \"ckeditor5-premium-features.css\", version)\n ]\n };\n return {\n // Preload resources specified in the pack, before loading the main script.\n preload: [\n ...urls.stylesheets,\n ...urls.scripts\n ],\n scripts: [\n // It's safe to load translations and the main script in parallel.\n async (attributes) => injectScriptsInParallel(urls.scripts, attributes)\n ],\n // Load all stylesheets of the premium features.\n stylesheets: urls.stylesheets,\n // Pick the exported global variables from the window object.\n checkPluginLoaded: async () => waitForWindowEntry([\"CKEDITOR_PREMIUM_FEATURES\"])\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nasync function loadCKCdnResourcesPack(pack) {\n let {\n htmlAttributes = {},\n scripts = [],\n stylesheets = [],\n preload,\n beforeInject,\n checkPluginLoaded\n } = normalizeCKCdnResourcesPack(pack);\n beforeInject?.();\n if (!preload) {\n preload = uniq([\n ...stylesheets.filter((item) => typeof item === \"string\"),\n ...scripts.filter((item) => typeof item === \"string\")\n ]);\n }\n for (const url of preload) {\n preloadResource(url, {\n attributes: htmlAttributes\n });\n }\n await Promise.all(\n uniq(stylesheets).map((href) => injectStylesheet({\n href,\n attributes: htmlAttributes,\n placementInHead: \"start\"\n }))\n );\n for (const script of uniq(scripts)) {\n const injectorProps = {\n attributes: htmlAttributes\n };\n if (typeof script === \"string\") {\n await injectScript(script, injectorProps);\n } else {\n await script(injectorProps);\n }\n }\n return checkPluginLoaded?.();\n}\nfunction normalizeCKCdnResourcesPack(pack) {\n if (Array.isArray(pack)) {\n return {\n scripts: pack.filter(\n (item) => typeof item === \"function\" || item.endsWith(\".js\")\n ),\n stylesheets: pack.filter(\n (item) => item.endsWith(\".css\")\n )\n };\n }\n if (typeof pack === \"function\") {\n return {\n checkPluginLoaded: pack\n };\n }\n return pack;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction combineCKCdnBundlesPacks(packs) {\n const normalizedPacks = mapObjectValues(\n filterBlankObjectValues(packs),\n normalizeCKCdnResourcesPack\n );\n const mergedPacks = Object.values(normalizedPacks).reduce(\n (acc, pack) => {\n acc.scripts.push(...pack.scripts ?? []);\n acc.stylesheets.push(...pack.stylesheets ?? []);\n acc.preload.push(...pack.preload ?? []);\n return acc;\n },\n {\n preload: [],\n scripts: [],\n stylesheets: []\n }\n );\n const checkPluginLoaded = async () => {\n const exportedGlobalVariables = /* @__PURE__ */ Object.create(null);\n for (const [name, pack] of Object.entries(normalizedPacks)) {\n exportedGlobalVariables[name] = await pack?.checkPluginLoaded?.();\n }\n return exportedGlobalVariables;\n };\n const beforeInject = () => {\n for (const pack of Object.values(normalizedPacks)) {\n pack.beforeInject?.();\n }\n };\n return {\n ...mergedPacks,\n beforeInject,\n checkPluginLoaded\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getCKBoxInstallationInfo() {\n const version = window.CKBox?.version;\n if (!isSemanticVersion(version)) {\n return null;\n }\n return {\n source: \"cdn\",\n version\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createCKBoxBundlePack({\n version,\n theme = \"lark\",\n translations,\n createCustomCdnUrl = createCKBoxCdnUrl\n}) {\n return {\n // Load the main script of the base features.\n scripts: [\n createCustomCdnUrl(\"ckbox\", \"ckbox.js\", version),\n // EN bundle is prebuilt into the main script, so we don't need to load it separately.\n ...without([\"en\"], translations || []).map(\n (translation) => createCustomCdnUrl(\"ckbox\", `translations/${translation}.js`, version)\n )\n ],\n // Load optional theme, if provided. It's not required but recommended because it improves the look and feel.\n ...theme && {\n stylesheets: [\n createCustomCdnUrl(\"ckbox\", `styles/themes/${theme}.css`, version)\n ]\n },\n // Pick the exported global variables from the window object.\n checkPluginLoaded: async () => waitForWindowEntry([\"CKBox\"]),\n // Check if the CKBox bundle is already loaded and throw an error if it is.\n beforeInject: () => {\n const installationInfo = getCKBoxInstallationInfo();\n if (installationInfo && installationInfo.version !== version) {\n throw new Error(\n `CKBox is already loaded from CDN in version ${installationInfo.version}. Remove the old <script> and <link> tags loading CKBox to allow loading the ${version} version.`\n );\n }\n }\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isCKCdnSupportedByEditorVersion(version) {\n if (isCKCdnTestingVersion(version)) {\n return true;\n }\n const { major } = destructureSemanticVersion(version);\n const licenseVersion = getLicenseVersionFromEditorVersion(version);\n switch (licenseVersion) {\n case 3:\n return true;\n default:\n return major === 43;\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction combineCdnPluginsPacks(pluginsPacks) {\n const normalizedPluginsPacks = mapObjectValues(pluginsPacks, (pluginPack, pluginName) => {\n if (!pluginPack) {\n return void 0;\n }\n const normalizedPluginPack = normalizeCKCdnResourcesPack(pluginPack);\n return {\n // Provide default window accessor object if the plugin pack does not define it.\n checkPluginLoaded: async () => waitForWindowEntry([pluginName]),\n // Transform the plugin pack to a normalized advanced pack.\n ...normalizedPluginPack\n };\n });\n return combineCKCdnBundlesPacks(\n normalizedPluginsPacks\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction loadCKEditorCloud(config) {\n const {\n version,\n translations,\n plugins,\n premium,\n ckbox,\n createCustomCdnUrl,\n injectedHtmlElementsAttributes = {\n crossorigin: \"anonymous\"\n }\n } = config;\n validateCKEditorVersion(version);\n const pack = combineCKCdnBundlesPacks({\n CKEditor: createCKCdnBaseBundlePack({\n version,\n translations,\n createCustomCdnUrl\n }),\n ...premium && {\n CKEditorPremiumFeatures: createCKCdnPremiumBundlePack({\n version,\n translations,\n createCustomCdnUrl\n })\n },\n ...ckbox && {\n CKBox: createCKBoxBundlePack(ckbox)\n },\n loadedPlugins: combineCdnPluginsPacks(plugins ?? {})\n });\n return loadCKCdnResourcesPack(\n {\n ...pack,\n htmlAttributes: injectedHtmlElementsAttributes\n }\n );\n}\nfunction validateCKEditorVersion(version) {\n if (isCKCdnTestingVersion(version)) {\n console.warn(\n \"You are using a testing version of CKEditor 5. Please remember that it is not suitable for production environments.\"\n );\n }\n if (!isCKCdnSupportedByEditorVersion(version)) {\n throw new Error(\n `The CKEditor 5 CDN can't be used with the given editor version: ${version}. Please make sure you are using at least the CKEditor 5 version 44.`\n );\n }\n}\n\nexport { CKBOX_CDN_URL, CK_CDN_URL, INJECTED_SCRIPTS, INJECTED_STYLESHEETS, appendExtraPluginsToEditorConfig, createCKBoxCdnUrl, createCKCdnUrl, createDefer, createIntegrationUsageDataPlugin, filterBlankObjectValues, filterObjectValues, injectScript, injectScriptsInParallel, injectStylesheet, isCKEditorFreeLicense, isSSR, loadCKEditorCloud, mapObjectValues, once, overwriteArray, overwriteObject, preloadResource, shallowCompareArrays, uid, uniq, waitFor, waitForWindowEntry, without };\n//# sourceMappingURL=index.js.map\n","import * as Vue from \"vue\";\nimport { version, defineComponent, mergeModels, useModel, ref, watch, onMounted, markRaw, onBeforeUnmount, openBlock, createBlock, resolveDynamicComponent, computed, watchEffect, shallowReadonly, toValue } from \"vue\";\nimport { debounce } from \"lodash-es\";\nimport { createIntegrationUsageDataPlugin, isCKEditorFreeLicense, appendExtraPluginsToEditorConfig, uid, loadCKEditorCloud } from \"@ckeditor/ckeditor5-integrations-common\";\nimport { loadCKEditorCloud as loadCKEditorCloud2 } from \"@ckeditor/ckeditor5-integrations-common\";\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nconst VueIntegrationUsageDataPlugin = createIntegrationUsageDataPlugin(\n \"vue\",\n {\n version: \"7.3.0\",\n frameworkVersion: version\n }\n);\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nfunction appendAllIntegrationPluginsToConfig(editorConfig) {\n if (isCKEditorFreeLicense(editorConfig.licenseKey)) {\n return editorConfig;\n }\n return appendExtraPluginsToEditorConfig(editorConfig, [\n /**\n * This part of the code is not executed in open-source implementations using a GPL key.\n * It only runs when a specific license key is provided. If you are uncertain whether\n * this applies to your installation, please contact our support team.\n */\n VueIntegrationUsageDataPlugin\n ]);\n}\nconst VUE_INTEGRATION_READ_ONLY_LOCK_ID = \"Lock from Vue integration (@ckeditor/ckeditor5-vue)\";\nconst INPUT_EVENT_DEBOUNCE_WAIT = 300;\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...{\n name: \"CKEditor\"\n },\n __name: \"ckeditor\",\n props: /* @__PURE__ */ mergeModels({\n editor: {},\n config: { default: () => ({}) },\n tagName: { default: \"div\" },\n disabled: { type: Boolean, default: false },\n disableTwoWayDataBinding: { type: Boolean, default: false }\n }, {\n \"modelValue\": { type: String, default: \"\" },\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"ready\", \"destroy\", \"blur\", \"focus\", \"input\", \"update:modelValue\"], [\"update:modelValue\"]),\n setup(__props, { expose: __expose, emit: __emit }) {\n const model = useModel(__props, \"modelValue\");\n const props = __props;\n const emit = __emit;\n const element = ref();\n const instance = ref();\n const lastEditorData = ref();\n __expose({\n instance,\n lastEditorData\n });\n watch(model, (newModel) => {\n if (instance.value && newModel !== lastEditorData.value) {\n instance.value.data.set(newModel);\n }\n });\n watch(() => props.disabled, (readOnlyMode) => {\n if (readOnlyMode) {\n instance.value.enableReadOnlyMode(VUE_INTEGRATION_READ_ONLY_LOCK_ID);\n } else {\n instance.value.disableReadOnlyMode(VUE_INTEGRATION_READ_ONLY_LOCK_ID);\n }\n });\n function checkVersion() {\n const version2 = window.CKEDITOR_VERSION;\n if (!version2) {\n return console.warn('Cannot find the \"CKEDITOR_VERSION\" in the \"window\" scope.');\n }\n const [major] = version2.split(\".\").map(Number);\n if (major >= 42 || version2.startsWith(\"0.0.0\")) {\n return;\n }\n console.warn(\"The <CKEditor> component requires using CKEditor 5 in version 42+ or nightly build.\");\n }\n function setUpEditorEvents(editor) {\n const emitDebouncedInputEvent = debounce((evt) => {\n if (props.disableTwoWayDataBinding) {\n return;\n }\n const data = lastEditorData.value = editor.data.get();\n emit(\"update:modelValue\", data, evt, editor);\n emit(\"input\", data, evt, editor);\n }, INPUT_EVENT_DEBOUNCE_WAIT, { leading: true });\n editor.model.document.on(\"change:data\", emitDebouncedInputEvent);\n editor.editing.view.document.on(\"focus\", (evt) => {\n emit(\"focus\", evt, editor);\n });\n editor.editing.view.document.on(\"blur\", (evt) => {\n emit(\"blur\", evt, editor);\n });\n }\n checkVersion();\n onMounted(() => {\n const editorConfig = appendAllIntegrationPluginsToConfig(\n Object.assign({}, props.config)\n );\n if (model.value) {\n editorConfig.initialData = model.value;\n }\n props.editor.create(element.value, editorConfig).then((editor) => {\n instance.value = markRaw(editor);\n setUpEditorEvents(editor);\n if (model.value !== editorConfig.initialData) {\n editor.data.set(model.value);\n }\n if (props.disabled) {\n editor.enableReadOnlyMode(VUE_INTEGRATION_READ_ONLY_LOCK_ID);\n }\n emit(\"ready\", editor);\n }).catch((error) => {\n console.error(error);\n });\n });\n onBeforeUnmount(() => {\n if (instance.value) {\n instance.value.destroy();\n instance.value = void 0;\n }\n emit(\"destroy\");\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(_ctx.tagName), {\n ref_key: \"element\",\n ref: element\n }, null, 512);\n };\n }\n});\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nconst useAsync = (asyncFunc) => {\n const lastQueryUUID = ref(null);\n const error = ref(null);\n const data = ref(null);\n const loading = computed(() => lastQueryUUID.value !== null);\n watchEffect(async () => {\n const currentQueryUID = uid();\n lastQueryUUID.value = currentQueryUID;\n data.value = null;\n error.value = null;\n const shouldDiscardQuery = () => lastQueryUUID.value !== currentQueryUID;\n try {\n const result = await asyncFunc();\n if (!shouldDiscardQuery()) {\n data.value = result;\n }\n } catch (err) {\n if (!shouldDiscardQuery()) {\n error.value = err;\n }\n } finally {\n if (!shouldDiscardQuery()) {\n lastQueryUUID.value = null;\n }\n }\n });\n return {\n loading: shallowReadonly(loading),\n data: shallowReadonly(data),\n error: shallowReadonly(error)\n };\n};\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nfunction useCKEditorCloud(config) {\n return useAsync(\n () => loadCKEditorCloud(\n toValue(config)\n )\n );\n}\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n/* istanbul ignore if -- @preserve */\nif (!Vue.version || !Vue.version.startsWith(\"3.\")) {\n throw new Error(\n \"The CKEditor plugin works only with Vue 3+. For more information, please refer to https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/frameworks/vuejs-v3.html\"\n );\n}\nconst CkeditorPlugin = {\n /**\n * Installs the plugin, registering the `<ckeditor>` component.\n *\n * @param app The application instance.\n */\n install(app) {\n app.component(\"Ckeditor\", _sfc_main);\n }\n};\nexport {\n _sfc_main as Ckeditor,\n CkeditorPlugin,\n loadCKEditorCloud2 as loadCKEditorCloud,\n useCKEditorCloud\n};\n//# sourceMappingURL=ckeditor.js.map\n","import Form, { ValidationErrorRenderContent } from '@dynamicforms/vue-forms';\nimport { isEmpty } from 'lodash-es';\nimport { computed } from 'vue';\n\nexport interface BaseProps<T = any> {\n control?: Form.IField<T>,\n modelValue?: T;\n label?: string;\n errors?: string[];\n placeholder?: string;\n helpText?: string;\n hint?: string,\n enabled?: boolean,\n visibility?: Form.DisplayMode,\n cssClass?: string;\n clearable?: boolean;\n}\n\nexport const defaultBaseProps = { enabled: undefined };\n\nexport interface BaseEmits<T = any> {\n (e: 'update:modelValue', value: T): void;\n\n (e: 'click:clear'): void;\n}\n\nexport function useInputBase<T = any>(props: BaseProps<T>, emit: BaseEmits<T>) {\n const value = computed({\n get(): T {\n if (props.control) {\n return props.control.value as T;\n }\n return props.modelValue as T;\n },\n set(newValue: T) {\n if (props.control) props.control.value = newValue;\n emit('update:modelValue', newValue);\n },\n });\n\n if (props.control && !(props.control instanceof Form.FieldBase)) {\n throw new Error('control prop is not a vue-form control instance');\n }\n\n const valid = computed(() => (props.control ? props.control.valid : true));\n const errors = computed(\n () => (props.control ?\n props.control.errors :\n (props.errors || []).map((error) => new ValidationErrorRenderContent(error))),\n );\n const anyErrors = computed(() => (errors.value.length > 0 ? ' ' : undefined));\n const enabled = computed(() => (props.control ? props.control.enabled : (props.enabled !== false)));\n const visibility = computed(\n () => (props.control ? props.control.visibility : (props.visibility || Form.DisplayMode.FULL)),\n );\n const label = computed(() => (props.label || ''));\n const placeholder = computed(() => (props.placeholder || ''));\n const helpText = computed(() => props.helpText || '');\n const hint = computed(() => props.hint || '');\n const cssClass = computed(() => props.cssClass || '');\n\n return {\n value,\n valid,\n enabled,\n errors,\n visibility,\n\n vuetifyBindings: computed(() => ({\n name: props.control?.fieldName,\n class: cssClass.value,\n\n density: 'default' as 'default',\n variant: 'underlined' as 'underlined',\n\n label: label.value,\n messages: anyErrors.value,\n // 'error-count': errors?.value.length || 0,\n readonly: !enabled.value,\n disabled: !enabled.value,\n\n placeholder: placeholder.value,\n 'persistent-placeholder': !isEmpty(placeholder.value),\n\n hint: hint.value,\n persistentHint: true, // we want persistent hint always\n hideDetails: <boolean | 'auto' | undefined>'auto', // we want to hide the hint element when hint isn't there\n helpText: helpText.value,\n })),\n };\n}\n","<template>\n <div\n v-if=\"visibility !== DisplayMode.SUPPRESS\"\n :class=\"[\n cssClass,\n {\n 'd-none': visibility === DisplayMode.HIDDEN,\n invisible: visibility === DisplayMode.INVISIBLE,\n },\n ]\"\n >\n <label v-if=\"vuetifyBindings.label\" for=\"#following-v-input\">{{ vuetifyBindings.label }}</label>\n <v-input\n :hint=\"vuetifyBindings.hint\"\n :persistent-hint=\"vuetifyBindings.persistentHint\"\n :hide-details=\"vuetifyBindings.hideDetails\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n <slot/>\n <template v-if=\"isClearable\" #append>\n <v-icon @click=\"emits('click:clear')\">mdi-close-circle</v-icon>\n </template>\n </v-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { computed, unref } from 'vue';\n\nimport MessagesWidget from './messages-widget.vue';\nimport { BaseEmits, BaseProps, useInputBase } from './input-base';\n\nconst props = defineProps<BaseProps>();\nconst emits = defineEmits<BaseEmits>();\n\nconst { errors, value, visibility, vuetifyBindings } = useInputBase(props, emits);\n\nconst isClearable = computed(() => (unref(props.clearable) && unref(value)));\n</script>\n\n<style scoped>\n\n</style>\n","/**\n * DisplayMode enum provides an enumeration for supported ways of rendering a particular object in the DOM\n */\nenum ActionDisplayStyle {\n // This enum is actually declared in dynamicforms.action.py\n BUTTON = 0, // action should render as a button\n TEXT = 1, // action should render as a link text\n}\n\nexport const defaultDisplayStyle = ActionDisplayStyle.BUTTON;\n\nnamespace ActionDisplayStyle {\n export function fromString(mode: string): ActionDisplayStyle {\n if (mode.toUpperCase() === 'BUTTON') return ActionDisplayStyle.BUTTON;\n if (mode.toUpperCase() === 'TEXT') return ActionDisplayStyle.TEXT;\n return defaultDisplayStyle;\n }\n\n export function fromAny(mode: any): ActionDisplayStyle {\n const input = (typeof mode === 'number') ? mode : ActionDisplayStyle.fromString(mode as string);\n if (Object.values(ActionDisplayStyle).includes(input)) return input;\n return defaultDisplayStyle;\n }\n\n export function isDefined(mode: number | string): boolean {\n const check = (typeof mode === 'number') ? mode : ActionDisplayStyle.fromString(mode as string);\n return Object.values(ActionDisplayStyle).includes(check);\n }\n}\n\nObject.freeze(ActionDisplayStyle);\n\nexport { ActionDisplayStyle };\n","import { isBoolean, isObjectLike, isString } from 'lodash-es';\n\nimport { ActionDisplayStyle } from './action-display-style';\n\nexport interface BreakpointJSON {\n renderAs?: ActionDisplayStyle;\n showLabel?: boolean;\n showIcon?: boolean;\n label?: string;\n}\n\nexport type BreakpointNames = 'xl' | 'lg' | 'md' | 'sm' | 'xs';\nexport interface BreakpointsJSON extends BreakpointJSON, Partial<Record<BreakpointNames, BreakpointJSON>> { }\n\nconst breakpoints: BreakpointNames[] = ['xl', 'lg', 'md', 'sm', 'xs'];\n\nexport default class ResponsiveRenderOptions {\n private readonly _value: BreakpointsJSON;\n\n constructor(data: BreakpointsJSON | undefined, label?: string) {\n this._value = {};\n if (!data) return;\n let baseOptions = ResponsiveRenderOptions.cleanBreakpoint(data);\n if (!baseOptions?.label && label) {\n if (!baseOptions) baseOptions = { label };\n else if (!baseOptions.label) baseOptions.label = label;\n }\n if (baseOptions) this._value = baseOptions;\n\n breakpoints.forEach((bp) => {\n const options = ResponsiveRenderOptions.cleanBreakpoint(data[bp]);\n if (options) this._value[bp] = options;\n });\n }\n\n getOptionsForBreakpoint(breakpoint: BreakpointNames): BreakpointJSON {\n const result = {\n label: this._value.label,\n renderAs: this._value.renderAs ?? ActionDisplayStyle.BUTTON,\n showLabel: this._value.showLabel ?? true,\n showIcon: this._value.showIcon ?? true,\n } as BreakpointJSON;\n const bps = [...breakpoints].reverse();\n for (const bp of bps) {\n const bpData = this._value[bp];\n if (bpData) {\n if (bpData.label != null) result.label = bpData.label;\n if (bpData.renderAs != null) result.renderAs = bpData.renderAs;\n if (bpData.showIcon != null) result.showIcon = bpData.showIcon;\n if (bpData.showLabel != null) result.showLabel = bpData.showLabel;\n }\n if (bp === breakpoint) break;\n }\n return result;\n }\n\n private static cleanBreakpoint(bp?: BreakpointJSON): BreakpointJSON | null {\n if (!bp || !isObjectLike(bp)) return null;\n\n const result: BreakpointJSON = {};\n\n if (bp.renderAs !== undefined) result.renderAs = ActionDisplayStyle.fromAny(bp.renderAs);\n if (isString(bp.label)) result.label = bp.label;\n if (isBoolean(bp.showLabel)) result.showLabel = bp.showLabel;\n if (isBoolean(bp.showIcon)) result.showIcon = bp.showIcon;\n\n return Object.keys(result).length ? result : null;\n }\n}\n","import { Action as FormAction, ExecuteAction } from '@dynamicforms/vue-forms';\nimport { isString } from 'lodash-es';\n\nimport { ActionDisplayStyle } from './action-display-style';\nimport ResponsiveRenderOptions, { BreakpointsJSON } from './responsive-render-options';\n\nexport interface ActionJSON {\n // [key: `action${string}`]: ActionHandler;\n name?: string;\n label?: string;\n icon?: string;\n displayStyle?: BreakpointsJSON;\n field_name?: string;\n}\n\nexport interface ActionsJSON {\n [key: string]: ActionJSON;\n}\n\nclass Action {\n public readonly name: string;\n\n public displayStyle: ResponsiveRenderOptions;\n\n public formAction: FormAction;\n\n constructor(data: ActionJSON, formAction: FormAction) {\n if (data.name == null) throw new Error(`Action name must not be empty ${data}`);\n // any non-string or empty string must resolve as null for label\n const label = !isString(data.label) || data.label.length === 0 ? undefined : data.label;\n // any non-string or empty string must resolve as null for icon\n const icon = !isString(data.icon) || data.icon.length === 0 ? undefined : data.icon;\n\n this.name = data.name;\n this.displayStyle = new ResponsiveRenderOptions(data.displayStyle, label);\n this.formAction = formAction;\n\n this.formAction.icon = icon;\n this.formAction.label = label;\n }\n\n get label() {\n return this.formAction?.label;\n }\n\n get labelAvailable() {\n return this.formAction.label !== undefined;\n }\n\n get icon() {\n return this.formAction?.icon;\n }\n\n get iconAvailable() {\n return this.formAction.icon !== undefined;\n }\n\n static actionFormName(actionName: string): string {\n return `$action${actionName.charAt(0).toUpperCase()}${actionName.slice(1)}`;\n }\n\n private static makeFormAction(actionOrExecuteHandler?: FormAction | ExecuteAction): FormAction {\n let fa: FormAction;\n if (actionOrExecuteHandler instanceof ExecuteAction) {\n fa = FormAction.create().registerAction(actionOrExecuteHandler);\n } else if (actionOrExecuteHandler === undefined) {\n fa = FormAction.create();\n } else if (actionOrExecuteHandler instanceof FormAction) {\n fa = actionOrExecuteHandler;\n } else {\n throw new Error('actionOrExecuteHandler is not of any of supported types');\n }\n return fa;\n }\n\n static closeAction(data: ActionJSON, actionOrExecuteHandler?: FormAction | ExecuteAction) {\n return new Action(\n {\n name: 'close',\n label: 'Close', // TODO: needs translation\n icon: 'close-outline',\n displayStyle: { renderAs: ActionDisplayStyle.BUTTON, showLabel: true, showIcon: true },\n ...data, // any properties in data should overwrite properties in the constant\n },\n this.makeFormAction(actionOrExecuteHandler),\n );\n }\n\n static yesAction(data: ActionJSON, actionOrExecuteHandler?: FormAction | ExecuteAction) {\n return new Action(\n {\n name: 'yes',\n label: 'Yes', // TODO: needs translation\n icon: 'thumbs-up-outline',\n displayStyle: { renderAs: ActionDisplayStyle.BUTTON, showLabel: true, showIcon: true },\n ...data, // any properties in data should overwrite properties in the constant\n },\n this.makeFormAction(actionOrExecuteHandler),\n );\n }\n\n static noAction(data: ActionJSON, actionOrExecuteHandler?: FormAction | ExecuteAction) {\n return new Action(\n {\n name: 'no',\n label: 'No', // TODO: needs translation\n icon: 'thumbs-down-outline',\n displayStyle: { renderAs: ActionDisplayStyle.BUTTON, showLabel: true, showIcon: true },\n ...data, // any properties in data should overwrite properties in the constant\n },\n this.makeFormAction(actionOrExecuteHandler),\n );\n }\n}\n\nexport { Action };\n","<template>\n <div\n v-if=\"actionsRef.length > 0\"\n class=\"text-end\"\n :class=\"{\n 'button-group': showAsGroup === 'grouped' || showAsGroup === 'grouped-no-borders',\n 'with-border': showAsGroup === 'grouped',\n }\"\n >\n <v-btn\n v-for=\"(action, idx) in actionsRef\"\n :key=\"idx\"\n :variant=\"displayAsStyle(action) === ActionDisplayStyle.BUTTON ? 'tonal' : 'text'\"\n :elevation=\"0\"\n :class=\"idx !== -1 ? '' : 'ms-3'\"\n :size=\"buttonSize\"\n @click.stop=\"(event: MouseEvent) => action.formAction.execute(event)\"\n >\n <IonIcon v-if=\"displayIcon(action)\" class=\"action-icon\" :name=\"<string> action.formAction.icon\"/>\n <span v-if=\"displayIcon(action) && displayLabel(action)\" style=\"width: .5rem\"/>\n <span v-if=\"displayLabel(action)\">{{ labelText(action) }}</span>\n </v-btn>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, isRef, ref, Ref } from 'vue';\nimport IonIcon from 'vue-ionicon';\nimport { useDisplay } from 'vuetify';\n\nimport { Action, BreakpointJSON, BreakpointNames, ActionDisplayStyle } from './helpers';\n\ntype ShowAsGroup = 'no' | 'grouped' | 'grouped-no-borders';\n\ninterface ActionComponentProps {\n actions: Action[] | Ref<Action[]>;\n buttonSize?: string | number; // see https://vuetifyjs.com/en/api/v-btn/#props-size\n showAsGroup?: ShowAsGroup\n}\n\nconst props = withDefaults(defineProps<ActionComponentProps>(), {\n buttonSize: 'default',\n showAsGroup: 'no',\n});\n\nconst actionsRef = <Ref<Action[]>>(isRef(props.actions) ? props.actions : ref(props.actions));\n\nfunction getBreakpointName(dp: ReturnType<typeof useDisplay>): BreakpointNames {\n if (dp.xlAndUp.value) return 'xl';\n if (dp.lgAndUp.value) return 'lg';\n if (dp.mdAndUp.value) return 'md';\n if (dp.smAndUp.value) return 'sm';\n return 'xs';\n}\n\nconst display = useDisplay();\nconst displayStyle = computed(() => {\n const res: Record<string, BreakpointJSON> = {};\n res['%breakpoint%'] = getBreakpointName(display) as any;\n for (const action of actionsRef.value) {\n res[action.name] = action.displayStyle.getOptionsForBreakpoint(getBreakpointName(display));\n }\n return res;\n});\n\n/*\nfunction asText(action: Action) {\n return displayStyle.value[action.name].renderAs !== ActionDisplayStyle.BUTTON;\n}\n\nfunction buttonVariant(action: Action) {\n return displayStyle.value[action.name].renderAs === ActionDisplayStyle.BUTTON ? 'info' : 'link';\n}\n*/\n\nfunction displayIcon(action: Action): boolean {\n return (displayStyle.value[action.name].showIcon && action.iconAvailable) ?? true;\n}\n\nfunction displayLabel(action: Action): boolean {\n if (displayStyle.value[action.name].showLabel && action.labelAvailable) return true;\n return !displayIcon(action);\n}\n\nfunction displayAsStyle(action: Action) : ActionDisplayStyle {\n return displayStyle.value[action.name].renderAs ?? ActionDisplayStyle.BUTTON;\n}\n\nfunction labelText(action: Action): string {\n if (action.labelAvailable) return action.formAction.label ?? '';\n return action.name;\n}\n</script>\n\n<style scoped>\n.action-icon {\n width: 1.5em;\n height: 1.5em;\n}\n.button-group {\n border-radius: .5em;\n /* the following two make the container fit the small buttons. without them there would be a top margin */\n line-height: 0;\n height: fit-content;\n}\n.button-group .v-btn {\n border: none;\n border-radius: 0;\n margin: 0 !important;\n padding: 0 .25em;\n}\n.button-group .v-btn:first-child {\n border-start-start-radius: .5em;\n border-end-start-radius: .5em;\n}\n.button-group .v-btn:last-child {\n border-start-end-radius: .5em;\n border-end-end-radius: .5em;\n}\n.button-group.with-border {\n border: .1em solid currentColor;\n}\n.button-group.with-border .v-btn:not(:first-child) {\n border-inline-start: .1em solid currentColor;\n}\n.v-btn:not(:first-child) {\n margin-left: 1em;\n}\n</style>\n","<template>\n <v-checkbox\n v-model=\"boolValue\"\n v-bind=\"vuetifyBindings as any\"\n\n density=\"compact\"\n :indeterminate=\"indeterminate\"\n :false-value=\"false\"\n :true-value=\"true\"\n @change=\"change\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-checkbox>\n</template>\n\n<script setup lang=\"ts\">\nimport { clone } from 'lodash-es';\nimport { computed } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n allowNull?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\n\nconst indeterminate = computed(() => props.allowNull && (value.value == null));\n\nconst boolValue = computed({\n get(): any { return value.value; },\n set() { },\n});\n\nfunction change() {\n const oldVal = clone(value.value);\n if (oldVal === true) {\n value.value = props.allowNull ? null : false;\n } else {\n value.value = oldVal === false;\n }\n}\n</script>\n","<template>\n <v-menu\n v-model=\"dropdownShown\"\n location=\"top start\"\n origin=\"bottom start\"\n :close-on-content-click=\"false\"\n >\n <template #activator=\"{ props: menuProps }\">\n <v-text-field\n v-model=\"value\"\n v-bind=\"{ ...vuetifyBindings, ...menuProps } as any\"\n :clearable=\"allowNull\"\n type=\"text\"\n :rules=\"rules\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n <template #prepend-inner>\n <div\n style=\"width: 24px; height: 24px; border-radius: 4px; border: 1px solid #ccc;\"\n :style=\"{ backgroundColor: value }\"\n />\n </template>\n </v-text-field>\n </template>\n <v-color-picker v-model=\"value\" mode=\"hexa\"/>\n </v-menu>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n allowNull?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\n\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\nconst dropdownShown = ref(false);\n\nconst rules = computed<((val: string) => boolean | string)[]>(() => ([\n (val: string) => {\n if (!val && props.allowNull) return true;\n const regex = /^#?([a-fA-F0-9]{6}[a-fA-F0-9]{0,2})$/;\n return regex.test(val) ? true : 'Not a valid hex string.';\n },\n]));\n</script>\n","<template>\n <input-base v-bind=\"props\" clearable @click:clear=\"value = null\">\n <v-menu\n v-model=\"dropdownShown\"\n location=\"top start\"\n :origin=\"`bottom ${inputType === 'datetime' ? 'center' : 'start'}`\"\n :close-on-content-click=\"false\"\n >\n <template #activator=\"{ props: menuProps }\">\n <div class=\"d-flex w-100\">\n <v-text-field\n v-if=\"['date', 'datetime'].includes(inputType)\"\n v-model=\"dateFormatted\"\n style=\"flex-grow: 4\"\n :density=\"vuetifyBindings.density\"\n :variant=\"vuetifyBindings.variant\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-date`\"\n v-bind=\"menuProps\"\n @click=\"dropdown = 'date'\"\n @keydown.space=\"dropdown = 'date'\"\n />\n <v-text-field\n v-if=\"['time', 'datetime'].includes(inputType)\"\n v-model=\"timeFormatted\"\n style=\"flex-grow: 3\"\n :density=\"vuetifyBindings.density\"\n :variant=\"vuetifyBindings.variant\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-time`\"\n v-bind=\"menuProps\"\n @click=\"dropdown = 'time'\"\n @keydown.space=\"dropdown = 'time'\"\n />\n </div>\n </template>\n <v-confirm-edit\n v-if=\"dropdown === 'date'\"\n v-model=\"valueAsDate\"\n @cancel=\"dropdown = ''\"\n @save=\"dropdown = ''\"\n >\n <template #default=\"{ model: proxyModel, actions }\">\n <v-date-picker\n v-model=\"proxyModel.value\"\n :hide-header=\"true\"\n :first-day-of-week=\"1\"\n :show-adjacent-months=\"true\"\n :show-week=\"true\"\n >\n <template #actions><component :is=\"actions\"/></template>\n </v-date-picker>\n </template>\n </v-confirm-edit>\n <v-confirm-edit\n v-if=\"dropdown === 'time'\"\n v-model=\"valueAsTimeString\"\n @cancel=\"dropdown = ''\"\n @save=\"dropdown = ''\"\n >\n <template #default=\"{ model: proxyModel, actions }\">\n <v-time-picker\n v-model=\"proxyModel.value\"\n :hide-header=\"true\"\n format=\"24hr\"\n >\n <template #actions><component :is=\"actions\"/></template>\n </v-time-picker>\n </template>\n </v-confirm-edit>\n </v-menu>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { format, parse } from 'date-fns';\nimport { toNumber, isNaN } from 'lodash-es';\nimport { ref, computed, watch, toRefs, unref } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, InputBase, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n inputType?: 'datetime' | 'date' | 'time';\n displayFormatDate?: string;\n displayFormatTime?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n inputType: 'datetime',\n displayFormatDate: 'P',\n displayFormatTime: 'p',\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { value, vuetifyBindings } = useInputBase<string | null>(props, emits);\nconst { inputType, displayFormatDate, displayFormatTime } = toRefs(props);\n\nconst dropdown = ref('');\nconst dropdownShown = computed({\n get() { return unref(dropdown) !== ''; },\n set(newValue: boolean) { if (newValue) dropdown.value = 'date'; else dropdown.value = ''; },\n});\n\nconst formatNaive = (val: Date) => `${format(val, 'yyyy-MM-dd')}T${format(val, 'HH:mm')}:00`;\n\nconst valueISOFull = ref<string | null>(null);\nfunction setValueISOFull(newISOValue: string | null, dateOrTimeIdx: number) {\n if (newISOValue == null) {\n valueISOFull.value = null;\n } else if (dateOrTimeIdx === -1) {\n // setting valueISOFull from value\n if (unref(inputType) === 'time') {\n valueISOFull.value = formatNaive(new Date());\n setValueISOFull(`T${newISOValue}`, 1);\n } else {\n const val = formatNaive(new Date(newISOValue));\n setValueISOFull(val, 0);\n setValueISOFull(val, 1);\n }\n } else {\n if (valueISOFull.value == null) valueISOFull.value = formatNaive(new Date());\n const vif = valueISOFull.value.split(/[TZ]/g);\n const nv = newISOValue!.split(/[TZ]/g);\n vif[dateOrTimeIdx] = nv[dateOrTimeIdx];\n valueISOFull.value = formatNaive(new Date(`${vif[0]}T${vif[1].split('.')[0]}`));\n\n if (unref(inputType) === 'date') value.value = vif[0];\n else if (unref(inputType) === 'time') value.value = vif[1];\n else value.value = unref(valueISOFull) + format(new Date(), 'XXX');\n }\n}\nwatch(value, (newValue: string | null) => setValueISOFull(newValue, -1), { immediate: true });\n\nconst valueAsDate = computed({\n get() {\n const uValue = unref(valueISOFull);\n if (uValue == null) return null;\n const res = new Date(uValue);\n return !Number.isNaN(res.getTime()) ? res : null;\n },\n set(newValue: Date) { setValueISOFull(formatNaive(newValue), 0); },\n});\n\nconst valueAsTimeString = computed({\n get() {\n const val = unref(valueISOFull);\n if (val == null) return '';\n const vif = val.split(/[TZ]/g);\n return vif[1].split('.')[0];\n },\n set(newValue: string) { setValueISOFull(`T${newValue}`, 1); },\n});\n\nconst dateFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatDate));\n },\n set(newValue: string) {\n try {\n const d = parse(newValue, unref(displayFormatDate), new Date());\n setValueISOFull(formatNaive(d), 0);\n } catch (err) {\n console.error(err);\n }\n },\n});\n\nconst timeFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatTime));\n },\n set(newValue: string) {\n const d = newValue.match(/(\\d+):(\\d+)\\s?([a-zA-Z]+)?/);\n if (d == null) return;\n let hour = toNumber(d[1]);\n const minute = toNumber(d[2]);\n if (isNaN(hour) || isNaN(minute)) return;\n if (d[3] && d[3].toLowerCase() === 'pm' && hour < 13) hour += 12;\n setValueISOFull(`T${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:00`, 1);\n },\n});\n</script>\n\n<style scoped>\n</style>\n","<template>\n <input-base v-bind=\"props\" clearable @click:clear=\"removeFile\">\n <div style=\"position: relative; width: 100%\">\n <v-progress-linear\n v-if=\"currentFile && progress < 100\"\n :model-value=\"progress\"\n :indeterminate=\"progress === -1\"\n height=\"10\"\n style=\"position: absolute; top: 50%; transform: translateY(-50%); width: 100%;\"\n />\n <v-file-input\n v-model=\"selectedFile\"\n :label=\"fileLabel\"\n :density=\"vuetifyBindings.density\"\n :variant=\"vuetifyBindings.variant\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"vuetifyBindings.name\"\n :hide-details=\"true\"\n :show-size=\"true\"\n :multiple=\"false\"\n :style=\"currentFile && progress < 100 ? 'visibility: hidden' : ''\"\n :clearable=\"false\"\n @update:model-value=\"handleFileChange\"\n />\n </div>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onBeforeUnmount, watch } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, FileComms, InputBase, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n comms: FileComms;\n}\nconst props = withDefaults(defineProps<Props>(), defaultBaseProps);\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { value, vuetifyBindings } = useInputBase(props, emits);\nconst touchInterval = ref<number | null>(null);\n\n// State\nconst currentFile = ref<File | null>(null);\nconst progress = ref(0);\nconst fileInputKey = ref(Math.round(Math.random() * 1000));\nconst selectedFile = ref<File | null>();\n\nconst fileLabel = computed(() => {\n if (!selectedFile.value && value.value) {\n return props.modelValue;\n }\n return '';\n});\n\nfunction clearTouchInterval() { if (touchInterval.value) window.clearInterval(touchInterval.value); }\nfunction setupTouchInterval() {\n clearTouchInterval();\n touchInterval.value = window.setInterval(() => {\n if (value.value) props.comms.touch(value.value);\n }, 60 * 1000);\n}\n\nonBeforeUnmount(() => clearTouchInterval());\nwatch(value, (newValue) => { if (newValue) setupTouchInterval(); else clearTouchInterval(); });\n\nasync function removeFile() {\n if (value.value) {\n await props.comms.delete(value.value);\n }\n\n value.value = null;\n progress.value = 0;\n fileInputKey.value = Math.round(Math.random() * 1000);\n currentFile.value = null;\n selectedFile.value = null;\n clearTouchInterval();\n}\n\nasync function upload(file: File) {\n progress.value = -1;\n currentFile.value = file;\n\n try {\n value.value = await props.comms.upload(\n file,\n (loaded: number, total: number) => {\n progress.value = Math.round((loaded * 100) / total);\n },\n );\n progress.value = 100;\n setupTouchInterval();\n } catch (err) {\n progress.value = 0;\n currentFile.value = null;\n fileInputKey.value = Math.round(Math.random() * 1000);\n selectedFile.value = null;\n throw err;\n }\n}\n\nfunction handleFileChange(file: File | File[]): any {\n if (file) {\n if (Array.isArray(file)) {\n console.error('Uploading multiple files not supported right now');\n } else {\n upload(file);\n }\n }\n}\n</script>\n","<template>\n <div class=\"container\">\n <v-text-field\n v-if=\"!isNumber\"\n v-model=\"value\"\n v-bind=\"vuetifyBindings as any\"\n :type=\"inputType\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-text-field>\n <v-number-input\n v-else\n v-model=\"value\"\n v-bind=\"{ ...vuetifyBindings, ...numberInputBindings } as any\"\n control-variant=\"stacked\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-number-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, unref } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n inputType?: 'text' | 'password' | 'email' | 'url' | 'number';\n precision?: number | null;\n step?: number;\n min?: number;\n max?: number;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n inputType: 'text',\n precision: null,\n step: undefined,\n min: undefined,\n max: undefined,\n});\n\ninterface Emits extends BaseEmits {\n}\n\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\nconst { inputType, max, min, precision, step } = toRefs(props);\n\nconst isNumber = computed(() => inputType.value === 'number');\nconst numberInputBindings = computed(() => (\n !isNumber.value ? {} : { min: unref(min), max: unref(max), precision: unref(precision), step: unref(step) }\n));\n</script>\n\n<style scoped>\n.container {\n width: 100%;\n}\n</style>\n","<template>\n <div class=\"editor-container\">\n <div class=\"editor-container__editor\">\n <div ref=\"editorElement\">\n <ckeditor\n v-if=\"isLayoutReady\"\n :model-value=\"modelValue\"\n :editor=\"editor\"\n :config=\"editorConfig\"\n :disabled=\"disabled\"\n :style=\"`min-height: ${minHeight}`\"\n @ready=\"onEditorReady\"\n @update:model-value=\"(event: any) => emit('update:modelValue', event)\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Editor, EditorConfig } from '@ckeditor/ckeditor5-core';\nimport {\n ClassicEditor, AccessibilityHelp, Alignment, AutoImage, AutoLink, Autosave, BalloonToolbar, BlockQuote,\n Bold, CloudServices, Essentials, GeneralHtmlSupport, Heading, HorizontalLine, ImageBlock, ImageCaption,\n ImageInline, ImageInsertViaUrl, ImageResize, ImageStyle, ImageToolbar, ImageUpload, Indent, IndentBlock,\n Italic, Link, List, MediaEmbed, Paragraph, PasteFromMarkdownExperimental, PasteFromOffice, Autoformat,\n SelectAll, Style, Table, TableCellProperties, TableColumnResize, TableProperties, TableToolbar, Undo,\n HeadingConfig, TextTransformation, Base64UploadAdapter,\n} from 'ckeditor5';\nimport { ref, onMounted } from 'vue';\n\nwithDefaults(defineProps<{\n modelValue: string;\n minHeight?: string;\n disabled?: boolean;\n}>(), { modelValue: '', minHeight: '7em', disabled: false });\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>();\n\nconst isLayoutReady = ref(false);\nconst editor = ClassicEditor;\n\nconst editorToolbarConfig = {\n items: [\n 'undo', 'redo', '|',\n 'selectAll', '|',\n 'heading', 'style', '|',\n 'bold', 'italic', '|',\n 'horizontalLine', 'link', 'mediaEmbed', 'insertTable', 'blockQuote', '|',\n 'alignment', '|',\n 'bulletedList', 'numberedList', 'outdent', 'indent', '|',\n 'accessibilityHelp',\n ],\n shouldNotGroupWhenFull: false,\n};\nconst editorPlugins = [\n AccessibilityHelp, Alignment, AutoImage, AutoLink, Autosave, BalloonToolbar, BlockQuote, Bold, CloudServices,\n Essentials, GeneralHtmlSupport, Heading, HorizontalLine, ImageBlock, ImageCaption, ImageInline, ImageInsertViaUrl,\n ImageResize, ImageStyle, ImageToolbar, ImageUpload, Indent, IndentBlock, Italic, Link, List, Autoformat,\n MediaEmbed, Paragraph, PasteFromMarkdownExperimental, PasteFromOffice, SelectAll, Style, Table, TableCellProperties,\n TableColumnResize, TableProperties, TableToolbar, Undo, TextTransformation, Base64UploadAdapter,\n];\nconst editorHeadings: HeadingConfig = {\n options: [\n { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' },\n { model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' },\n { model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' },\n { model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' },\n { model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4' },\n { model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5' },\n { model: 'heading6', view: 'h6', title: 'Heading 6', class: 'ck-heading_heading6' },\n ],\n};\nconst editorConfig: EditorConfig = {\n toolbar: editorToolbarConfig,\n plugins: editorPlugins,\n balloonToolbar: ['bold', 'italic', '|', 'link', '|', 'bulletedList', 'numberedList'],\n heading: editorHeadings,\n htmlSupport: {\n allow: [\n { name: /^.*$/, styles: true, attributes: true, classes: true },\n ],\n },\n image: {\n toolbar: [\n 'toggleImageCaption', 'imageTextAlternative', '|',\n 'imageStyle:inline', 'imageStyle:wrapText', 'imageStyle:breakText', '|',\n 'resizeImage',\n ],\n },\n // initialData: '',\n link: {\n addTargetToExternalLinks: true,\n defaultProtocol: 'https://',\n decorators: {\n toggleDownloadable: {\n mode: 'manual',\n label: 'Downloadable',\n attributes: { download: 'file' },\n },\n },\n },\n placeholder: 'Type or paste your content here!',\n style: {\n definitions: [\n { name: 'Article category', element: 'h3', classes: ['category'] },\n { name: 'Title', element: 'h2', classes: ['document-title'] },\n { name: 'Subtitle', element: 'h3', classes: ['document-subtitle'] },\n { name: 'Info box', element: 'p', classes: ['info-box'] },\n { name: 'Side quote', element: 'blockquote', classes: ['side-quote'] },\n { name: 'Marker', element: 'span', classes: ['marker'] },\n { name: 'Spoiler', element: 'span', classes: ['spoiler'] },\n { name: 'Code (dark)', element: 'pre', classes: ['fancy-code', 'fancy-code-dark'] },\n { name: 'Code (bright)', element: 'pre', classes: ['fancy-code', 'fancy-code-bright'] },\n ],\n },\n table: { contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells', 'tableProperties', 'tableCellProperties'] },\n};\n\nonMounted(() => {\n isLayoutReady.value = true;\n});\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst onEditorReady = (editorReady: Editor) => {\n // console.log('Editor is ready to use!', editorReady);\n};\n\ndefineExpose({ onEditorReady });\n</script>\n\n<style>\n@import 'ckeditor5/ckeditor5.css';\n@import url('https://fonts.googleapis.com/css2?family=Oswald&family=PT+Serif:ital,wght@0,400;0,700;1,400&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');\n\n:root {\n /* In addition to this, any v-dialog must also have :retain-focus=\"false\" */\n --ck-z-default: 20000!important;\n --ck-z-modal: calc( var(--ck-z-default) + 20999 );\n}\n\n@media print {\n body {\n margin: 0 !important;\n }\n}\n\n.editor-container {\n font-family: 'Lato';\n}\n\n.ck-content {\n font-family: 'Lato';\n line-height: 1.6;\n word-break: break-word;\n}\n\n.editor-container, .editor-container__editor {\n width: 100%;\n}\n\n:root .ck-editor__editable_inline {\n min-height: v-bind(minHeight);\n}\n\n.ck-content h3.category {\n font-family: 'Oswald';\n font-size: 20px;\n font-weight: bold;\n color: #555;\n letter-spacing: 10px;\n margin: 0;\n padding: 0;\n}\n\n.ck-content h2.document-title {\n font-family: 'Oswald';\n font-size: 50px;\n font-weight: bold;\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n.ck-content h3.document-subtitle {\n font-family: 'Oswald';\n font-size: 20px;\n color: #555;\n margin: 0 0 1em;\n font-weight: bold;\n padding: 0;\n}\n\ndiv.ck.ck-editor__editable_inline * {\n /* disables any styles declared on the page prior to the editor */\n all: revert;\n}\n\n.ck-content p.info-box {\n --background-size: 30px;\n --background-color: #e91e63;\n padding: 1.2em 2em;\n border: 1px solid var(--background-color);\n background: linear-gradient(\n 135deg,\n var(--background-color) 0%,\n var(--background-color) var(--background-size),\n transparent var(--background-size)\n ),\n linear-gradient(\n 135deg,\n transparent calc(100% - var(--background-size)),\n var(--background-color) calc(100% - var(--background-size)),\n var(--background-color)\n );\n border-radius: 10px;\n margin: 1.5em 2em;\n box-shadow: 5px 5px 0 #ffe6ef;\n}\n\n.ck-content blockquote.side-quote {\n font-family: 'Oswald';\n font-style: normal;\n float: right;\n width: 35%;\n position: relative;\n border: 0;\n overflow: visible;\n z-index: 1;\n margin-left: 1em;\n}\n\n.ck-content blockquote.side-quote::before {\n content: '“';\n position: absolute;\n top: -37px;\n left: -10px;\n display: block;\n font-size: 200px;\n color: #e7e7e7;\n z-index: -1;\n line-height: 1;\n}\n\n.ck-content blockquote.side-quote p {\n font-size: 2em;\n line-height: 1;\n}\n\n.ck-content blockquote.side-quote p:last-child:not(:first-child) {\n font-size: 1.3em;\n text-align: right;\n color: #555;\n}\n\n.ck-content span.marker {\n background: yellow;\n}\n\n.ck-content span.spoiler {\n background: #000;\n color: #000;\n}\n\n.ck-content span.spoiler:hover {\n background: #000;\n color: #fff;\n}\n\n.ck-content pre.fancy-code {\n border: 0;\n margin-left: 2em;\n margin-right: 2em;\n border-radius: 10px;\n}\n\n.ck-content pre.fancy-code::before {\n content: '';\n display: block;\n height: 13px;\n background: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NCAxMyI+CiAgPGNpcmNsZSBjeD0iNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGMzZCNUMiLz4KICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGOUJFNEQiLz4KICA8Y2lyY2xlIGN4PSI0Ny41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiM1NkM0NTMiLz4KPC9zdmc+Cg==);\n margin-bottom: 8px;\n background-repeat: no-repeat;\n}\n\n.ck-content pre.fancy-code-dark {\n background: #272822;\n color: #fff;\n box-shadow: 5px 5px 0 #0000001f;\n}\n\n.ck-content pre.fancy-code-bright {\n background: #dddfe0;\n color: #000;\n box-shadow: 5px 5px 0 #b3b3b3;\n}\n</style>\n","<template>\n <input-base v-bind=\"props\">\n <ck-editor-custom ref=\"$editor\" v-model=\"value\" :min-height=\"minHeight\" :disabled=\"vuetifyBindings.disabled\"/>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { BaseEmits, BaseProps, defaultBaseProps, InputBase, useInputBase } from './helpers';\nimport CkEditorCustom from './helpers/ck-editor-custom.vue';\n\ninterface Props extends BaseProps {\n minHeight?: string;\n}\nconst props = withDefaults(defineProps<Props>(), { ...defaultBaseProps, minHeight: undefined });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { value, vuetifyBindings } = useInputBase(props, emits);\n</script>\n","import { isArray, first, castArray } from 'lodash-es';\nimport { Ref } from 'vue';\n\nimport { SelectChoice } from './df-select.interface';\n\nexport function convertItems(items: SelectChoice[]) {\n return items.map((item) => ({ value: item.id, title: item.text, icon: item.icon }));\n}\n\n/**\n * multipleCompliantValue ensures that resulting value of the select component is\n * 1 - null, when nothing is selected\n * 2 - array, when multiple is truthy\n * 3 - ordinal / simple value when multiple is not truthy\n * @param value the value to make compliant\n * @param multiple indicator for multiple selection\n */\nexport function multipleCompliantValue(value: any, multiple: boolean): any {\n // Če je vrednost null ali undefined\n if (value == null) return null;\n\n // Če je prazno polje (za multiple)\n if (isArray(value) && value.length === 0) return null;\n\n // Za multiple vedno vrni polje\n if (multiple) return castArray(value);\n\n // Za single vrni prvo vrednost ali vrednost samo\n return isArray(value) ? (first(value) ?? null) : value;\n}\n\nexport function getSelectedChoices(loadedChoices: SelectChoice[], multipleCpliantValue: any | any[] | null) {\n if (multipleCpliantValue == null) return [];\n const mcValue = castArray(multipleCpliantValue);\n return loadedChoices.filter((choice) => mcValue.some((val: any) => val === choice.id));\n}\n\n/**\n * updateSelectedFromValue ensures that the actual select component receives model-value formatted to its needs\n */\nexport function updateSelectedFromValue(\n resultingValue: any,\n selected: Ref<any>,\n multiple: boolean,\n taggable: boolean,\n loadedChoices: SelectChoice[],\n) {\n const mcValue = multipleCompliantValue(resultingValue, multiple);\n\n if (mcValue == null) {\n selected.value = multiple ? [] : null;\n return;\n }\n\n if (multiple) {\n if (taggable) {\n // if taggable (can add new items not in choices), keep the value as-is\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n selected.value = getSelectedChoices(loadedChoices, mcValue).map((choice) => choice.id);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (taggable) {\n // if taggable, we just keep the selected value\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n const matchingChoice = first(getSelectedChoices(loadedChoices, mcValue));\n selected.value = matchingChoice?.id ?? null;\n }\n }\n}\n","<template>\n <component\n :is=\"taggable ? 'v-combobox' : 'v-autocomplete'\"\n v-if=\"visibility !== DisplayMode.SUPPRESS\"\n v-model=\"selected\"\n\n :class=\"[\n cssClass,\n {\n 'd-none': visibility === DisplayMode.HIDDEN,\n invisible: visibility === DisplayMode.INVISIBLE,\n },\n ]\"\n\n :items=\"options\"\n :return-object=\"false\"\n\n v-bind=\"vuetifyBindings\"\n :label=\"isFocused ? '' : vuetifyBindings.label\"\n\n chips\n :auto-select-first=\"true\"\n :closable-chips=\"allowNull || (multiple && selected.length > 1)\"\n :clearable=\"allowNull\"\n :multiple=\"multiple\"\n :loading=\"loading\"\n :hide-selected=\"false\"\n :aria-describedby=\"vuetifyBindings.helpText ? `${vuetifyBindings.name}-help` : null\"\n :menu-props=\"{ maxHeight: '400' }\"\n hide-details=\"auto\"\n @update:search=\"(query: any) => queryOptions(query, undefined)\"\n @update:model-value=\"onSelect\"\n @click:clear=\"selected = null\"\n @focus=\"isFocused = true\"\n @blur=\"isFocused = false\"\n >\n <template #chip=\"{ item }\">\n <v-chip\n :key=\"item.value\"\n label\n size=\"small\"\n :variant=\"multiple ? 'tonal' : 'text'\"\n :closable=\"multiple\"\n @click:close=\"chipClose(item.value)\"\n >\n <template #prepend>\n <span v-if=\"item.raw?.icon\" class=\"me-1\">\n <IonIcon class=\"action-icon d-inline-block\" :name=\"item.raw.icon\"/>\n </span>\n </template>\n {{ item.title }}\n </v-chip>\n </template>\n\n <template #item=\"{ props: prps, item }\">\n <v-list-item v-bind=\"prps\">\n <template #prepend>\n <span v-if=\"item.raw?.icon\" class=\"me-1\">\n <IonIcon class=\"action-icon d-inline-block\" :name=\"item.raw.icon\"/>\n </span>\n </template>\n </v-list-item>\n </template>\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { ref, computed, toRefs, watch, nextTick } from 'vue';\nimport IonIcon from 'vue-ionicon';\n\nimport {\n BaseEmits,\n BaseProps,\n defaultBaseProps,\n MessagesWidget,\n SelectChoice,\n SelectFetchChoices,\n useInputBase,\n} from './helpers';\nimport {\n convertItems,\n getSelectedChoices,\n multipleCompliantValue,\n updateSelectedFromValue,\n} from './helpers/df-select.helper';\n\ninterface Props extends BaseProps {\n choices?: SelectChoice[];\n multiple?: boolean;\n allowTags?: boolean;\n allowNull?: boolean;\n fetchChoices?: SelectFetchChoices;\n}\n\nconst propsWithDefaults = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n choices: undefined,\n multiple: false,\n allowTags: false,\n allowNull: true,\n fetchChoices: undefined,\n});\n\nconst { choices } = propsWithDefaults;\nconst { multiple, allowTags: taggable, allowNull, cssClass, visibility } = toRefs(propsWithDefaults);\nconst isFocused = ref(false);\n\ninterface Emits extends BaseEmits {\n (e: 'update:modelValueDisplay', value: SelectChoice[]): any;\n}\n\nconst emits = defineEmits<Emits>();\n\nconst { errors, value: resultingValue, vuetifyBindings } = useInputBase(propsWithDefaults, emits);\n\nconst selected = ref<any>(null);\nconst loadedChoices = ref<SelectChoice[]>(choices || []);\nconst loading = ref<boolean>(false);\n\nconst options = computed(() => convertItems(loadedChoices.value));\n\nfunction emitModelValueDisplay(mcVal: any) {\n emits('update:modelValueDisplay', getSelectedChoices(loadedChoices.value, mcVal));\n}\n\nwatch(selected, (newValue) => {\n if (vuetifyBindings.value.readonly) return;\n nextTick(() => {\n const mcVal = multipleCompliantValue(newValue, multiple.value);\n emitModelValueDisplay(mcVal);\n resultingValue.value = mcVal;\n });\n}, { deep: true });\n\nfunction onSelect(/* val: any */) {\n if (vuetifyBindings.value.readonly || taggable.value) return;\n const mcVal = multipleCompliantValue(selected.value, multiple.value);\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n resultingValue.value = mcVal;\n}\n\nfunction chipClose(itemValue: any) {\n let mcVal;\n if (multiple.value && Array.isArray(selected.value)) {\n mcVal = multipleCompliantValue(selected.value.filter((v) => v !== itemValue), multiple.value);\n } else {\n mcVal = null;\n }\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n resultingValue.value = mcVal;\n}\n\nasync function queryOptions(queryValue?: any, idValue?: any): Promise<void> {\n if (choices || propsWithDefaults.fetchChoices === undefined) return;\n loading.value = true;\n try {\n loadedChoices.value = await propsWithDefaults.fetchChoices(queryValue, idValue);\n } finally {\n loading.value = false;\n }\n}\n\nfunction initialValueCheck() {\n let val = resultingValue.value;\n if (!allowNull.value && val == null && options.value.length) {\n // Starting settings: check if value is mandatory and select the first item from the options\n val = options.value[0].value;\n }\n val = multipleCompliantValue(val, multiple.value);\n updateSelectedFromValue(val, selected, multiple.value, taggable.value, loadedChoices.value);\n emitModelValueDisplay(val);\n resultingValue.value = val;\n}\n\ninitialValueCheck();\n\n// Starting settings: check if ajax and current value is not loaded yet - then load the value from back-end\nif (propsWithDefaults.fetchChoices !== undefined) {\n queryOptions(undefined, resultingValue.value).then(() => {\n initialValueCheck();\n });\n}\n</script>\n<style scoped>\n.action-icon {\n width: 1.5em;\n height: 1.5em;\n}\n</style>\n","<template>\n <div class=\"container\">\n <v-textarea\n v-if=\"visibility !== DisplayMode.SUPPRESS\"\n v-model=\"value\"\n :class=\"[\n cssClass,\n {\n 'd-none': visibility === DisplayMode.HIDDEN,\n invisible: visibility === DisplayMode.INVISIBLE,\n },\n ]\"\n\n :rows=\"rows\"\n :auto-grow=\"(maxRows || 0) > 0\"\n :max-rows=\"maxRows\"\n v-bind=\"vuetifyBindings as any\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-textarea>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { toRefs } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n rows?: number;\n maxRows?: number;\n}\nconst props = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n rows: undefined,\n maxRows: undefined,\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\nconst { cssClass, visibility } = toRefs(props);\n</script>\n\n<style scoped>\n.container {\n width: 100%;\n}\n</style>\n","import { CkeditorPlugin } from '@ckeditor/ckeditor5-vue';\nimport { App } from 'vue';\n\nimport * as Inputs from './dynamicforms-components';\nimport * as VuetifyComponents from './vuetify-components';\n\nexport * from './helpers';\nexport * as VuetifyComponents from './vuetify-components';\nexport * from './dynamicforms-components';\n\nexport interface DynamicFormsInputsOptions {\n registerComponents: boolean;\n registerVuetifyComponents: boolean;\n}\n\nexport const DynamicFormsInputs = {\n install: (app: App, options?: Partial<DynamicFormsInputsOptions>) => {\n app.use(CkeditorPlugin);\n if (options?.registerComponents ?? false) {\n Object.entries(Inputs).map(([name, component]) => app.component(name, component));\n }\n if (options?.registerVuetifyComponents ?? false) {\n Object.entries(VuetifyComponents).map(([name, component]) => app.component(name, component));\n }\n },\n};\n"],"names":["_","index","appendExtraPluginsToEditorConfig","config","plugins","extraPlugins","__spreadProps","__spreadValues","item","isSemanticVersion","version","isCKCdnTestingVersion","testVersion","isCKCdnVersion","destructureSemanticVersion","major","minor","patch","getLicenseVersionFromEditorVersion","getCKBaseBundleInstallationInfo","CKEDITOR_VERSION","CKEDITOR","getSupportedLicenseVersionInstallationInfo","installationInfo","isCKEditorFreeLicense","licenseKey","licenseVersion","createIntegrationUsageDataPlugin","integrationName","usageData","editor","source","setUsageData","VueIntegrationUsageDataPlugin","appendAllIntegrationPluginsToConfig","editorConfig","VUE_INTEGRATION_READ_ONLY_LOCK_ID","INPUT_EVENT_DEBOUNCE_WAIT","_sfc_main","defineComponent","mergeModels","__props","__expose","__emit","model","useModel","props","emit","element","ref","instance","lastEditorData","watch","newModel","readOnlyMode","checkVersion","version2","setUpEditorEvents","emitDebouncedInputEvent","debounce","evt","data","onMounted","markRaw","error","onBeforeUnmount","_ctx","_cache","openBlock","createBlock","resolveDynamicComponent","Vue","CkeditorPlugin","app","defaultBaseProps","useInputBase","value","computed","newValue","Form","valid","errors","ValidationErrorRenderContent","anyErrors","enabled","visibility","label","placeholder","helpText","hint","cssClass","_a","isEmpty","emits","vuetifyBindings","isClearable","unref","ActionDisplayStyle","defaultDisplayStyle","fromString","mode","fromAny","input","isDefined","check","breakpoints","ResponsiveRenderOptions","__publicField","baseOptions","bp","options","breakpoint","result","_b","_c","bps","bpData","isObjectLike","isString","isBoolean","Action","formAction","icon","actionName","actionOrExecuteHandler","fa","ExecuteAction","FormAction","actionsRef","isRef","getBreakpointName","dp","display","useDisplay","displayStyle","res","action","displayIcon","displayLabel","displayAsStyle","labelText","indeterminate","boolValue","change","oldVal","clone","dropdownShown","rules","val","inputType","displayFormatDate","displayFormatTime","toRefs","dropdown","formatNaive","format","valueISOFull","setValueISOFull","newISOValue","dateOrTimeIdx","vif","nv","valueAsDate","uValue","valueAsTimeString","dateFormatted","vad","d","parse","err","timeFormatted","hour","toNumber","minute","isNaN","touchInterval","currentFile","progress","fileInputKey","selectedFile","fileLabel","clearTouchInterval","setupTouchInterval","removeFile","__async","upload","file","loaded","total","handleFileChange","max","min","precision","step","isNumber","numberInputBindings","isLayoutReady","ClassicEditor","editorToolbarConfig","editorPlugins","AccessibilityHelp","Alignment","AutoImage","AutoLink","Autosave","BalloonToolbar","BlockQuote","Bold","CloudServices","Essentials","GeneralHtmlSupport","Heading","HorizontalLine","ImageBlock","ImageCaption","ImageInline","ImageInsertViaUrl","ImageResize","ImageStyle","ImageToolbar","ImageUpload","Indent","IndentBlock","Italic","Link","List","Autoformat","MediaEmbed","Paragraph","PasteFromMarkdownExperimental","PasteFromOffice","SelectAll","Style","Table","TableCellProperties","TableColumnResize","TableProperties","TableToolbar","Undo","TextTransformation","Base64UploadAdapter","onEditorReady","editorReady","convertItems","items","multipleCompliantValue","multiple","isArray","castArray","first","getSelectedChoices","loadedChoices","multipleCpliantValue","mcValue","choice","updateSelectedFromValue","resultingValue","selected","taggable","matchingChoice","propsWithDefaults","choices","allowNull","isFocused","loading","emitModelValueDisplay","mcVal","nextTick","onSelect","chipClose","itemValue","v","queryOptions","queryValue","idValue","initialValueCheck","DynamicFormsInputs","Inputs","name","component","VuetifyComponents"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"dynamicforms-vuetify-inputs.umd.cjs","sources":["../node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js","../node_modules/@ckeditor/ckeditor5-vue/dist/ckeditor.js","../src/helpers/input-base.ts","../src/helpers/input-base.vue","../src/helpers/action/action-display-style.ts","../src/helpers/action/responsive-render-options.ts","../src/helpers/action/action.ts","../src/df-actions.vue","../src/df-checkbox.vue","../src/df-color.vue","../src/df-datetime.vue","../src/df-file.vue","../src/df-input.vue","../src/helpers/ck-editor-custom.vue","../src/df-rtf-editor.vue","../src/helpers/df-select.helper.ts","../src/df-select.vue","../src/df-text-area.vue","../src/index.ts"],"sourcesContent":["/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createDefer() {\n const deferred = {\n resolve: null,\n promise: null\n };\n deferred.promise = new Promise((resolve) => {\n deferred.resolve = resolve;\n });\n return deferred;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction waitFor(callback, {\n timeOutAfter = 500,\n retryAfter = 100\n} = {}) {\n return new Promise((resolve, reject) => {\n const startTime = Date.now();\n let lastError = null;\n const timeoutTimerId = setTimeout(() => {\n reject(lastError ?? new Error(\"Timeout\"));\n }, timeOutAfter);\n const tick = async () => {\n try {\n const result = await callback();\n clearTimeout(timeoutTimerId);\n resolve(result);\n } catch (err) {\n lastError = err;\n if (Date.now() - startTime > timeOutAfter) {\n reject(err);\n } else {\n setTimeout(tick, retryAfter);\n }\n }\n };\n tick();\n });\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst INJECTED_SCRIPTS = /* @__PURE__ */ new Map();\nfunction injectScript(src, { attributes } = {}) {\n if (INJECTED_SCRIPTS.has(src)) {\n return INJECTED_SCRIPTS.get(src);\n }\n const maybePrevScript = document.querySelector(`script[src=\"${src}\"]`);\n if (maybePrevScript) {\n console.warn(`Script with \"${src}\" src is already present in DOM!`);\n maybePrevScript.remove();\n }\n const promise = new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.onerror = reject;\n script.onload = () => {\n resolve();\n };\n for (const [key, value] of Object.entries(attributes || {})) {\n script.setAttribute(key, value);\n }\n script.setAttribute(\"data-injected-by\", \"ckeditor-integration\");\n script.type = \"text/javascript\";\n script.async = true;\n script.src = src;\n document.head.appendChild(script);\n const observer = new MutationObserver((mutations) => {\n const removedNodes = mutations.flatMap((mutation) => Array.from(mutation.removedNodes));\n if (removedNodes.includes(script)) {\n INJECTED_SCRIPTS.delete(src);\n observer.disconnect();\n }\n });\n observer.observe(document.head, {\n childList: true,\n subtree: true\n });\n });\n INJECTED_SCRIPTS.set(src, promise);\n return promise;\n}\nasync function injectScriptsInParallel(sources, props) {\n await Promise.all(\n sources.map((src) => injectScript(src, props))\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst INJECTED_STYLESHEETS = /* @__PURE__ */ new Map();\nfunction injectStylesheet({\n href,\n placementInHead = \"start\",\n attributes = {}\n}) {\n if (INJECTED_STYLESHEETS.has(href)) {\n return INJECTED_STYLESHEETS.get(href);\n }\n const maybePrevStylesheet = document.querySelector(`link[href=\"${href}\"][rel=\"stylesheet\"]`);\n if (maybePrevStylesheet) {\n console.warn(`Stylesheet with \"${href}\" href is already present in DOM!`);\n maybePrevStylesheet.remove();\n }\n const appendLinkTagToHead = (link) => {\n const previouslyInjectedLinks = Array.from(\n document.head.querySelectorAll('link[data-injected-by=\"ckeditor-integration\"]')\n );\n switch (placementInHead) {\n case \"start\":\n if (previouslyInjectedLinks.length) {\n previouslyInjectedLinks.slice(-1)[0].after(link);\n } else {\n document.head.insertBefore(link, document.head.firstChild);\n }\n break;\n case \"end\":\n document.head.appendChild(link);\n break;\n }\n };\n const promise = new Promise((resolve, reject) => {\n const link = document.createElement(\"link\");\n for (const [key, value] of Object.entries(attributes || {})) {\n link.setAttribute(key, value);\n }\n link.setAttribute(\"data-injected-by\", \"ckeditor-integration\");\n link.rel = \"stylesheet\";\n link.href = href;\n link.onerror = reject;\n link.onload = () => {\n resolve();\n };\n appendLinkTagToHead(link);\n const observer = new MutationObserver((mutations) => {\n const removedNodes = mutations.flatMap((mutation) => Array.from(mutation.removedNodes));\n if (removedNodes.includes(link)) {\n INJECTED_STYLESHEETS.delete(href);\n observer.disconnect();\n }\n });\n observer.observe(document.head, {\n childList: true,\n subtree: true\n });\n });\n INJECTED_STYLESHEETS.set(href, promise);\n return promise;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isSSR() {\n return typeof window === \"undefined\";\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction once(fn) {\n let lastResult = null;\n return (...args) => {\n if (!lastResult) {\n lastResult = {\n current: fn(...args)\n };\n }\n return lastResult.current;\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction overwriteArray(source, destination) {\n destination.length = 0;\n destination.push(...source);\n return destination;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction overwriteObject(source, destination) {\n for (const prop of Object.getOwnPropertyNames(destination)) {\n delete destination[prop];\n }\n for (const [key, value] of Object.entries(source)) {\n if (value !== destination && key !== \"prototype\" && key !== \"__proto__\") {\n destination[key] = value;\n }\n }\n return destination;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction preloadResource(url, { attributes } = {}) {\n if (document.head.querySelector(`link[href=\"${url}\"][rel=\"preload\"]`)) {\n return;\n }\n const link = document.createElement(\"link\");\n for (const [key, value] of Object.entries(attributes || {})) {\n link.setAttribute(key, value);\n }\n link.setAttribute(\"data-injected-by\", \"ckeditor-integration\");\n link.rel = \"preload\";\n link.as = detectTypeOfResource(url);\n link.href = url;\n document.head.insertBefore(link, document.head.firstChild);\n}\nfunction detectTypeOfResource(url) {\n switch (true) {\n case /\\.css$/.test(url):\n return \"style\";\n case /\\.js$/.test(url):\n return \"script\";\n default:\n return \"fetch\";\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction shallowCompareArrays(a, b) {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst HEX_NUMBERS = new Array(256).fill(\"\").map((_, index) => (\"0\" + index.toString(16)).slice(-2));\nfunction uid() {\n const [r1, r2, r3, r4] = crypto.getRandomValues(new Uint32Array(4));\n return \"e\" + HEX_NUMBERS[r1 >> 0 & 255] + HEX_NUMBERS[r1 >> 8 & 255] + HEX_NUMBERS[r1 >> 16 & 255] + HEX_NUMBERS[r1 >> 24 & 255] + HEX_NUMBERS[r2 >> 0 & 255] + HEX_NUMBERS[r2 >> 8 & 255] + HEX_NUMBERS[r2 >> 16 & 255] + HEX_NUMBERS[r2 >> 24 & 255] + HEX_NUMBERS[r3 >> 0 & 255] + HEX_NUMBERS[r3 >> 8 & 255] + HEX_NUMBERS[r3 >> 16 & 255] + HEX_NUMBERS[r3 >> 24 & 255] + HEX_NUMBERS[r4 >> 0 & 255] + HEX_NUMBERS[r4 >> 8 & 255] + HEX_NUMBERS[r4 >> 16 & 255] + HEX_NUMBERS[r4 >> 24 & 255];\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction uniq(source) {\n return Array.from(new Set(source));\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nasync function waitForWindowEntry(entryNames, config) {\n const tryPickBundle = () => entryNames.map((name) => window[name]).filter(Boolean)[0];\n return waitFor(\n () => {\n const result = tryPickBundle();\n if (!result) {\n throw new Error(`Window entry \"${entryNames.join(\",\")}\" not found.`);\n }\n return result;\n },\n config\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction filterObjectValues(obj, filter) {\n const filteredEntries = Object.entries(obj).filter(([key, value]) => filter(value, key));\n return Object.fromEntries(filteredEntries);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction filterBlankObjectValues(obj) {\n return filterObjectValues(\n obj,\n (value) => value !== null && value !== void 0\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction mapObjectValues(obj, mapper) {\n const mappedEntries = Object.entries(obj).map(([key, value]) => [key, mapper(value, key)]);\n return Object.fromEntries(mappedEntries);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction without(itemsToRemove, items) {\n return items.filter((item) => !itemsToRemove.includes(item));\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction appendExtraPluginsToEditorConfig(config, plugins) {\n const extraPlugins = config.extraPlugins || [];\n return {\n ...config,\n extraPlugins: [\n ...extraPlugins,\n ...plugins.filter((item) => !extraPlugins.includes(item))\n ]\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isSemanticVersion(version) {\n return !!version && /^\\d+\\.\\d+\\.\\d+/.test(version);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isCKCdnTestingVersion(version) {\n if (!version) {\n return false;\n }\n return [\"nightly\", \"alpha\", \"internal\", \"nightly-\", \"staging\"].some((testVersion) => version.includes(testVersion));\n}\nfunction isCKCdnVersion(version) {\n return isSemanticVersion(version) || isCKCdnTestingVersion(version);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction destructureSemanticVersion(version) {\n if (!isSemanticVersion(version)) {\n throw new Error(`Invalid semantic version: ${version || \"<blank>\"}.`);\n }\n const [major, minor, patch] = version.split(\".\");\n return {\n major: Number.parseInt(major, 10),\n minor: Number.parseInt(minor, 10),\n patch: Number.parseInt(patch, 10)\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getLicenseVersionFromEditorVersion(version) {\n if (isCKCdnTestingVersion(version)) {\n return 3;\n }\n const { major } = destructureSemanticVersion(version);\n switch (true) {\n case major >= 44:\n return 3;\n case major >= 38:\n return 2;\n default:\n return 1;\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getCKBaseBundleInstallationInfo() {\n const { CKEDITOR_VERSION, CKEDITOR } = window;\n if (!isCKCdnVersion(CKEDITOR_VERSION)) {\n return null;\n }\n return {\n source: CKEDITOR ? \"cdn\" : \"npm\",\n version: CKEDITOR_VERSION\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getSupportedLicenseVersionInstallationInfo() {\n const installationInfo = getCKBaseBundleInstallationInfo();\n if (!installationInfo) {\n return null;\n }\n return getLicenseVersionFromEditorVersion(installationInfo.version);\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isCKEditorFreeLicense(licenseKey, licenseVersion) {\n licenseVersion ||= getSupportedLicenseVersionInstallationInfo() || void 0;\n switch (licenseVersion) {\n case 1:\n case 2:\n return licenseKey === void 0;\n case 3:\n return licenseKey === \"GPL\";\n default: {\n return false;\n }\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createIntegrationUsageDataPlugin(integrationName, usageData) {\n return function IntegrationUsageDataPlugin(editor) {\n if (isCKEditorFreeLicense(editor.config.get(\"licenseKey\"))) {\n return;\n }\n editor.on(\"collectUsageData\", (source, { setUsageData }) => {\n setUsageData(`integration.${integrationName}`, usageData);\n });\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst CK_CDN_URL = \"https://cdn.ckeditor.com\";\nfunction createCKCdnUrl(bundle, file, version) {\n return `${CK_CDN_URL}/${bundle}/${version}/${file}`;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst CKBOX_CDN_URL = \"https://cdn.ckbox.io\";\nfunction createCKBoxCdnUrl(bundle, file, version) {\n return `${CKBOX_CDN_URL}/${bundle}/${version}/${file}`;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nconst CK_DOCS_URL = \"https://ckeditor.com/docs/ckeditor5\";\nfunction createCKDocsUrl(path, version = \"latest\") {\n return `${CK_DOCS_URL}/${version}/${path}`;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createCKCdnBaseBundlePack({\n version,\n translations,\n createCustomCdnUrl = createCKCdnUrl\n}) {\n const urls = {\n scripts: [\n // Load the main script of the base features.\n createCustomCdnUrl(\"ckeditor5\", \"ckeditor5.umd.js\", version),\n // Load all JavaScript files from the base features.\n // EN bundle is prebuilt into the main script, so we don't need to load it separately.\n ...without([\"en\"], translations || []).map(\n (translation) => createCustomCdnUrl(\"ckeditor5\", `translations/${translation}.umd.js`, version)\n )\n ],\n stylesheets: [\n createCustomCdnUrl(\"ckeditor5\", \"ckeditor5.css\", version)\n ]\n };\n return {\n // Preload resources specified in the pack, before loading the main script.\n preload: [\n ...urls.stylesheets,\n ...urls.scripts\n ],\n scripts: [\n // It's safe to load translations and the main script in parallel.\n async (attributes) => injectScriptsInParallel(urls.scripts, attributes)\n ],\n // Load all stylesheets of the base features.\n stylesheets: urls.stylesheets,\n // Pick the exported global variables from the window object.\n checkPluginLoaded: async () => waitForWindowEntry([\"CKEDITOR\"]),\n // Check if the CKEditor base bundle is already loaded and throw an error if it is.\n beforeInject: () => {\n const installationInfo = getCKBaseBundleInstallationInfo();\n switch (installationInfo?.source) {\n case \"npm\":\n throw new Error(\n \"CKEditor 5 is already loaded from npm. Check the migration guide for more details: \" + createCKDocsUrl(\"updating/migration-to-cdn/vanilla-js.html\")\n );\n case \"cdn\":\n if (installationInfo.version !== version) {\n throw new Error(\n `CKEditor 5 is already loaded from CDN in version ${installationInfo.version}. Remove the old <script> and <link> tags loading CKEditor 5 to allow loading the ${version} version.`\n );\n }\n break;\n }\n }\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createCKCdnPremiumBundlePack({\n version,\n translations,\n createCustomCdnUrl = createCKCdnUrl\n}) {\n const urls = {\n scripts: [\n // Load the main script of the premium features.\n createCustomCdnUrl(\"ckeditor5-premium-features\", \"ckeditor5-premium-features.umd.js\", version),\n // Load all JavaScript files from the premium features.\n // EN bundle is prebuilt into the main script, so we don't need to load it separately.\n ...without([\"en\"], translations || []).map(\n (translation) => createCustomCdnUrl(\"ckeditor5-premium-features\", `translations/${translation}.umd.js`, version)\n )\n ],\n stylesheets: [\n createCustomCdnUrl(\"ckeditor5-premium-features\", \"ckeditor5-premium-features.css\", version)\n ]\n };\n return {\n // Preload resources specified in the pack, before loading the main script.\n preload: [\n ...urls.stylesheets,\n ...urls.scripts\n ],\n scripts: [\n // It's safe to load translations and the main script in parallel.\n async (attributes) => injectScriptsInParallel(urls.scripts, attributes)\n ],\n // Load all stylesheets of the premium features.\n stylesheets: urls.stylesheets,\n // Pick the exported global variables from the window object.\n checkPluginLoaded: async () => waitForWindowEntry([\"CKEDITOR_PREMIUM_FEATURES\"])\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nasync function loadCKCdnResourcesPack(pack) {\n let {\n htmlAttributes = {},\n scripts = [],\n stylesheets = [],\n preload,\n beforeInject,\n checkPluginLoaded\n } = normalizeCKCdnResourcesPack(pack);\n beforeInject?.();\n if (!preload) {\n preload = uniq([\n ...stylesheets.filter((item) => typeof item === \"string\"),\n ...scripts.filter((item) => typeof item === \"string\")\n ]);\n }\n for (const url of preload) {\n preloadResource(url, {\n attributes: htmlAttributes\n });\n }\n await Promise.all(\n uniq(stylesheets).map((href) => injectStylesheet({\n href,\n attributes: htmlAttributes,\n placementInHead: \"start\"\n }))\n );\n for (const script of uniq(scripts)) {\n const injectorProps = {\n attributes: htmlAttributes\n };\n if (typeof script === \"string\") {\n await injectScript(script, injectorProps);\n } else {\n await script(injectorProps);\n }\n }\n return checkPluginLoaded?.();\n}\nfunction normalizeCKCdnResourcesPack(pack) {\n if (Array.isArray(pack)) {\n return {\n scripts: pack.filter(\n (item) => typeof item === \"function\" || item.endsWith(\".js\")\n ),\n stylesheets: pack.filter(\n (item) => item.endsWith(\".css\")\n )\n };\n }\n if (typeof pack === \"function\") {\n return {\n checkPluginLoaded: pack\n };\n }\n return pack;\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction combineCKCdnBundlesPacks(packs) {\n const normalizedPacks = mapObjectValues(\n filterBlankObjectValues(packs),\n normalizeCKCdnResourcesPack\n );\n const mergedPacks = Object.values(normalizedPacks).reduce(\n (acc, pack) => {\n acc.scripts.push(...pack.scripts ?? []);\n acc.stylesheets.push(...pack.stylesheets ?? []);\n acc.preload.push(...pack.preload ?? []);\n return acc;\n },\n {\n preload: [],\n scripts: [],\n stylesheets: []\n }\n );\n const checkPluginLoaded = async () => {\n const exportedGlobalVariables = /* @__PURE__ */ Object.create(null);\n for (const [name, pack] of Object.entries(normalizedPacks)) {\n exportedGlobalVariables[name] = await pack?.checkPluginLoaded?.();\n }\n return exportedGlobalVariables;\n };\n const beforeInject = () => {\n for (const pack of Object.values(normalizedPacks)) {\n pack.beforeInject?.();\n }\n };\n return {\n ...mergedPacks,\n beforeInject,\n checkPluginLoaded\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction getCKBoxInstallationInfo() {\n const version = window.CKBox?.version;\n if (!isSemanticVersion(version)) {\n return null;\n }\n return {\n source: \"cdn\",\n version\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction createCKBoxBundlePack({\n version,\n theme = \"lark\",\n translations,\n createCustomCdnUrl = createCKBoxCdnUrl\n}) {\n return {\n // Load the main script of the base features.\n scripts: [\n createCustomCdnUrl(\"ckbox\", \"ckbox.js\", version),\n // EN bundle is prebuilt into the main script, so we don't need to load it separately.\n ...without([\"en\"], translations || []).map(\n (translation) => createCustomCdnUrl(\"ckbox\", `translations/${translation}.js`, version)\n )\n ],\n // Load optional theme, if provided. It's not required but recommended because it improves the look and feel.\n ...theme && {\n stylesheets: [\n createCustomCdnUrl(\"ckbox\", `styles/themes/${theme}.css`, version)\n ]\n },\n // Pick the exported global variables from the window object.\n checkPluginLoaded: async () => waitForWindowEntry([\"CKBox\"]),\n // Check if the CKBox bundle is already loaded and throw an error if it is.\n beforeInject: () => {\n const installationInfo = getCKBoxInstallationInfo();\n if (installationInfo && installationInfo.version !== version) {\n throw new Error(\n `CKBox is already loaded from CDN in version ${installationInfo.version}. Remove the old <script> and <link> tags loading CKBox to allow loading the ${version} version.`\n );\n }\n }\n };\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction isCKCdnSupportedByEditorVersion(version) {\n if (isCKCdnTestingVersion(version)) {\n return true;\n }\n const { major } = destructureSemanticVersion(version);\n const licenseVersion = getLicenseVersionFromEditorVersion(version);\n switch (licenseVersion) {\n case 3:\n return true;\n default:\n return major === 43;\n }\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction combineCdnPluginsPacks(pluginsPacks) {\n const normalizedPluginsPacks = mapObjectValues(pluginsPacks, (pluginPack, pluginName) => {\n if (!pluginPack) {\n return void 0;\n }\n const normalizedPluginPack = normalizeCKCdnResourcesPack(pluginPack);\n return {\n // Provide default window accessor object if the plugin pack does not define it.\n checkPluginLoaded: async () => waitForWindowEntry([pluginName]),\n // Transform the plugin pack to a normalized advanced pack.\n ...normalizedPluginPack\n };\n });\n return combineCKCdnBundlesPacks(\n normalizedPluginsPacks\n );\n}\n\n/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nfunction loadCKEditorCloud(config) {\n const {\n version,\n translations,\n plugins,\n premium,\n ckbox,\n createCustomCdnUrl,\n injectedHtmlElementsAttributes = {\n crossorigin: \"anonymous\"\n }\n } = config;\n validateCKEditorVersion(version);\n const pack = combineCKCdnBundlesPacks({\n CKEditor: createCKCdnBaseBundlePack({\n version,\n translations,\n createCustomCdnUrl\n }),\n ...premium && {\n CKEditorPremiumFeatures: createCKCdnPremiumBundlePack({\n version,\n translations,\n createCustomCdnUrl\n })\n },\n ...ckbox && {\n CKBox: createCKBoxBundlePack(ckbox)\n },\n loadedPlugins: combineCdnPluginsPacks(plugins ?? {})\n });\n return loadCKCdnResourcesPack(\n {\n ...pack,\n htmlAttributes: injectedHtmlElementsAttributes\n }\n );\n}\nfunction validateCKEditorVersion(version) {\n if (isCKCdnTestingVersion(version)) {\n console.warn(\n \"You are using a testing version of CKEditor 5. Please remember that it is not suitable for production environments.\"\n );\n }\n if (!isCKCdnSupportedByEditorVersion(version)) {\n throw new Error(\n `The CKEditor 5 CDN can't be used with the given editor version: ${version}. Please make sure you are using at least the CKEditor 5 version 44.`\n );\n }\n}\n\nexport { CKBOX_CDN_URL, CK_CDN_URL, INJECTED_SCRIPTS, INJECTED_STYLESHEETS, appendExtraPluginsToEditorConfig, createCKBoxCdnUrl, createCKCdnUrl, createDefer, createIntegrationUsageDataPlugin, filterBlankObjectValues, filterObjectValues, injectScript, injectScriptsInParallel, injectStylesheet, isCKEditorFreeLicense, isSSR, loadCKEditorCloud, mapObjectValues, once, overwriteArray, overwriteObject, preloadResource, shallowCompareArrays, uid, uniq, waitFor, waitForWindowEntry, without };\n//# sourceMappingURL=index.js.map\n","import * as Vue from \"vue\";\nimport { version, defineComponent, mergeModels, useModel, ref, watch, onMounted, markRaw, onBeforeUnmount, openBlock, createBlock, resolveDynamicComponent, computed, watchEffect, shallowReadonly, toValue } from \"vue\";\nimport { debounce } from \"lodash-es\";\nimport { createIntegrationUsageDataPlugin, isCKEditorFreeLicense, appendExtraPluginsToEditorConfig, uid, loadCKEditorCloud } from \"@ckeditor/ckeditor5-integrations-common\";\nimport { loadCKEditorCloud as loadCKEditorCloud2 } from \"@ckeditor/ckeditor5-integrations-common\";\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nconst VueIntegrationUsageDataPlugin = createIntegrationUsageDataPlugin(\n \"vue\",\n {\n version: \"7.3.0\",\n frameworkVersion: version\n }\n);\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nfunction appendAllIntegrationPluginsToConfig(editorConfig) {\n if (isCKEditorFreeLicense(editorConfig.licenseKey)) {\n return editorConfig;\n }\n return appendExtraPluginsToEditorConfig(editorConfig, [\n /**\n * This part of the code is not executed in open-source implementations using a GPL key.\n * It only runs when a specific license key is provided. If you are uncertain whether\n * this applies to your installation, please contact our support team.\n */\n VueIntegrationUsageDataPlugin\n ]);\n}\nconst VUE_INTEGRATION_READ_ONLY_LOCK_ID = \"Lock from Vue integration (@ckeditor/ckeditor5-vue)\";\nconst INPUT_EVENT_DEBOUNCE_WAIT = 300;\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...{\n name: \"CKEditor\"\n },\n __name: \"ckeditor\",\n props: /* @__PURE__ */ mergeModels({\n editor: {},\n config: { default: () => ({}) },\n tagName: { default: \"div\" },\n disabled: { type: Boolean, default: false },\n disableTwoWayDataBinding: { type: Boolean, default: false }\n }, {\n \"modelValue\": { type: String, default: \"\" },\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"ready\", \"destroy\", \"blur\", \"focus\", \"input\", \"update:modelValue\"], [\"update:modelValue\"]),\n setup(__props, { expose: __expose, emit: __emit }) {\n const model = useModel(__props, \"modelValue\");\n const props = __props;\n const emit = __emit;\n const element = ref();\n const instance = ref();\n const lastEditorData = ref();\n __expose({\n instance,\n lastEditorData\n });\n watch(model, (newModel) => {\n if (instance.value && newModel !== lastEditorData.value) {\n instance.value.data.set(newModel);\n }\n });\n watch(() => props.disabled, (readOnlyMode) => {\n if (readOnlyMode) {\n instance.value.enableReadOnlyMode(VUE_INTEGRATION_READ_ONLY_LOCK_ID);\n } else {\n instance.value.disableReadOnlyMode(VUE_INTEGRATION_READ_ONLY_LOCK_ID);\n }\n });\n function checkVersion() {\n const version2 = window.CKEDITOR_VERSION;\n if (!version2) {\n return console.warn('Cannot find the \"CKEDITOR_VERSION\" in the \"window\" scope.');\n }\n const [major] = version2.split(\".\").map(Number);\n if (major >= 42 || version2.startsWith(\"0.0.0\")) {\n return;\n }\n console.warn(\"The <CKEditor> component requires using CKEditor 5 in version 42+ or nightly build.\");\n }\n function setUpEditorEvents(editor) {\n const emitDebouncedInputEvent = debounce((evt) => {\n if (props.disableTwoWayDataBinding) {\n return;\n }\n const data = lastEditorData.value = editor.data.get();\n emit(\"update:modelValue\", data, evt, editor);\n emit(\"input\", data, evt, editor);\n }, INPUT_EVENT_DEBOUNCE_WAIT, { leading: true });\n editor.model.document.on(\"change:data\", emitDebouncedInputEvent);\n editor.editing.view.document.on(\"focus\", (evt) => {\n emit(\"focus\", evt, editor);\n });\n editor.editing.view.document.on(\"blur\", (evt) => {\n emit(\"blur\", evt, editor);\n });\n }\n checkVersion();\n onMounted(() => {\n const editorConfig = appendAllIntegrationPluginsToConfig(\n Object.assign({}, props.config)\n );\n if (model.value) {\n editorConfig.initialData = model.value;\n }\n props.editor.create(element.value, editorConfig).then((editor) => {\n instance.value = markRaw(editor);\n setUpEditorEvents(editor);\n if (model.value !== editorConfig.initialData) {\n editor.data.set(model.value);\n }\n if (props.disabled) {\n editor.enableReadOnlyMode(VUE_INTEGRATION_READ_ONLY_LOCK_ID);\n }\n emit(\"ready\", editor);\n }).catch((error) => {\n console.error(error);\n });\n });\n onBeforeUnmount(() => {\n if (instance.value) {\n instance.value.destroy();\n instance.value = void 0;\n }\n emit(\"destroy\");\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(_ctx.tagName), {\n ref_key: \"element\",\n ref: element\n }, null, 512);\n };\n }\n});\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nconst useAsync = (asyncFunc) => {\n const lastQueryUUID = ref(null);\n const error = ref(null);\n const data = ref(null);\n const loading = computed(() => lastQueryUUID.value !== null);\n watchEffect(async () => {\n const currentQueryUID = uid();\n lastQueryUUID.value = currentQueryUID;\n data.value = null;\n error.value = null;\n const shouldDiscardQuery = () => lastQueryUUID.value !== currentQueryUID;\n try {\n const result = await asyncFunc();\n if (!shouldDiscardQuery()) {\n data.value = result;\n }\n } catch (err) {\n if (!shouldDiscardQuery()) {\n error.value = err;\n }\n } finally {\n if (!shouldDiscardQuery()) {\n lastQueryUUID.value = null;\n }\n }\n });\n return {\n loading: shallowReadonly(loading),\n data: shallowReadonly(data),\n error: shallowReadonly(error)\n };\n};\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nfunction useCKEditorCloud(config) {\n return useAsync(\n () => loadCKEditorCloud(\n toValue(config)\n )\n );\n}\n/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n/* istanbul ignore if -- @preserve */\nif (!Vue.version || !Vue.version.startsWith(\"3.\")) {\n throw new Error(\n \"The CKEditor plugin works only with Vue 3+. For more information, please refer to https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/frameworks/vuejs-v3.html\"\n );\n}\nconst CkeditorPlugin = {\n /**\n * Installs the plugin, registering the `<ckeditor>` component.\n *\n * @param app The application instance.\n */\n install(app) {\n app.component(\"Ckeditor\", _sfc_main);\n }\n};\nexport {\n _sfc_main as Ckeditor,\n CkeditorPlugin,\n loadCKEditorCloud2 as loadCKEditorCloud,\n useCKEditorCloud\n};\n//# sourceMappingURL=ckeditor.js.map\n","import Form, { ValidationErrorRenderContent } from '@dynamicforms/vue-forms';\nimport { isEmpty } from 'lodash-es';\nimport { computed } from 'vue';\n\nexport interface BaseProps<T = any> {\n control?: Form.IField<T>,\n modelValue?: T;\n label?: string;\n errors?: string[];\n placeholder?: string;\n helpText?: string;\n hint?: string,\n enabled?: boolean,\n visibility?: Form.DisplayMode,\n cssClass?: string;\n clearable?: boolean;\n}\n\nexport const defaultBaseProps = { enabled: undefined };\n\nexport interface BaseEmits<T = any> {\n (e: 'update:modelValue', value: T): void;\n\n (e: 'click:clear'): void;\n}\n\nexport function useInputBase<T = any>(props: BaseProps<T>, emit: BaseEmits<T>) {\n const value = computed({\n get(): T {\n if (props.control) {\n return props.control.value as T;\n }\n return props.modelValue as T;\n },\n set(newValue: T) {\n if (props.control) props.control.value = newValue;\n emit('update:modelValue', newValue);\n },\n });\n\n if (props.control && !(props.control instanceof Form.FieldBase)) {\n throw new Error('control prop is not a vue-form control instance');\n }\n\n const valid = computed(() => (props.control ? props.control.valid : true));\n const errors = computed(\n () => (props.control ?\n props.control.errors :\n (props.errors || []).map((error) => new ValidationErrorRenderContent(error))),\n );\n const anyErrors = computed(() => (errors.value.length > 0 ? ' ' : undefined));\n const enabled = computed(() => (props.control ? props.control.enabled : (props.enabled !== false)));\n const visibility = computed(\n () => (props.control ? props.control.visibility : (props.visibility || Form.DisplayMode.FULL)),\n );\n const label = computed(() => (props.label || ''));\n const placeholder = computed(() => (props.placeholder || ''));\n const helpText = computed(() => props.helpText || '');\n const hint = computed(() => props.hint || '');\n const cssClass = computed(() => props.cssClass || '');\n\n return {\n value,\n valid,\n enabled,\n errors,\n visibility,\n\n vuetifyBindings: computed(() => ({\n name: props.control?.fieldName,\n class: cssClass.value,\n\n density: 'default' as 'default',\n variant: 'underlined' as 'underlined',\n\n label: label.value,\n messages: anyErrors.value,\n // 'error-count': errors?.value.length || 0,\n readonly: !enabled.value,\n disabled: !enabled.value,\n\n placeholder: placeholder.value,\n 'persistent-placeholder': !isEmpty(placeholder.value),\n\n hint: hint.value,\n persistentHint: true, // we want persistent hint always\n hideDetails: <boolean | 'auto' | undefined>'auto', // we want to hide the hint element when hint isn't there\n helpText: helpText.value,\n })),\n };\n}\n","<template>\n <div\n v-if=\"visibility !== DisplayMode.SUPPRESS\"\n :class=\"[\n cssClass,\n {\n 'd-none': visibility === DisplayMode.HIDDEN,\n invisible: visibility === DisplayMode.INVISIBLE,\n },\n ]\"\n >\n <label v-if=\"vuetifyBindings.label\" for=\"#following-v-input\">{{ vuetifyBindings.label }}</label>\n <v-input\n :hint=\"vuetifyBindings.hint\"\n :persistent-hint=\"vuetifyBindings.persistentHint\"\n :hide-details=\"vuetifyBindings.hideDetails\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n <slot/>\n <template v-if=\"isClearable\" #append>\n <v-icon @click=\"emits('click:clear')\">mdi-close-circle</v-icon>\n </template>\n </v-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { computed, unref } from 'vue';\n\nimport { BaseEmits, BaseProps, useInputBase } from './input-base';\nimport MessagesWidget from './messages-widget.vue';\n\nconst props = defineProps<BaseProps>();\nconst emits = defineEmits<BaseEmits>();\n\nconst { errors, value, visibility, vuetifyBindings } = useInputBase(props, emits);\n\nconst isClearable = computed(() => (unref(props.clearable) && unref(value)));\n</script>\n\n<style scoped>\n\n</style>\n","/**\n * DisplayMode enum provides an enumeration for supported ways of rendering a particular object in the DOM\n */\nenum ActionDisplayStyle {\n // This enum is actually declared in dynamicforms.action.py\n BUTTON = 0, // action should render as a button\n TEXT = 1, // action should render as a link text\n}\n\nexport const defaultDisplayStyle = ActionDisplayStyle.BUTTON;\n\nnamespace ActionDisplayStyle {\n export function fromString(mode: string): ActionDisplayStyle {\n if (mode.toUpperCase() === 'BUTTON') return ActionDisplayStyle.BUTTON;\n if (mode.toUpperCase() === 'TEXT') return ActionDisplayStyle.TEXT;\n return defaultDisplayStyle;\n }\n\n export function fromAny(mode: any): ActionDisplayStyle {\n const input = (typeof mode === 'number') ? mode : ActionDisplayStyle.fromString(mode as string);\n if (Object.values(ActionDisplayStyle).includes(input)) return input;\n return defaultDisplayStyle;\n }\n\n export function isDefined(mode: number | string): boolean {\n const check = (typeof mode === 'number') ? mode : ActionDisplayStyle.fromString(mode as string);\n return Object.values(ActionDisplayStyle).includes(check);\n }\n}\n\nObject.freeze(ActionDisplayStyle);\n\nexport { ActionDisplayStyle };\n","import { isBoolean, isObjectLike, isString } from 'lodash-es';\n\nimport { ActionDisplayStyle } from './action-display-style';\n\nexport interface BreakpointJSON {\n renderAs?: ActionDisplayStyle;\n showLabel?: boolean;\n showIcon?: boolean;\n label?: string;\n}\n\nexport type BreakpointNames = 'xl' | 'lg' | 'md' | 'sm' | 'xs';\nexport interface BreakpointsJSON extends BreakpointJSON, Partial<Record<BreakpointNames, BreakpointJSON>> { }\n\nconst breakpoints: BreakpointNames[] = ['xl', 'lg', 'md', 'sm', 'xs'];\n\nexport default class ResponsiveRenderOptions {\n private readonly _value: BreakpointsJSON;\n\n constructor(data: BreakpointsJSON | undefined, label?: string) {\n this._value = {};\n if (!data) return;\n let baseOptions = ResponsiveRenderOptions.cleanBreakpoint(data);\n if (!baseOptions?.label && label) {\n if (!baseOptions) baseOptions = { label };\n else if (!baseOptions.label) baseOptions.label = label;\n }\n if (baseOptions) this._value = baseOptions;\n\n breakpoints.forEach((bp) => {\n const options = ResponsiveRenderOptions.cleanBreakpoint(data[bp]);\n if (options) this._value[bp] = options;\n });\n }\n\n getOptionsForBreakpoint(breakpoint: BreakpointNames): BreakpointJSON {\n const result = {\n label: this._value.label,\n renderAs: this._value.renderAs ?? ActionDisplayStyle.BUTTON,\n showLabel: this._value.showLabel ?? true,\n showIcon: this._value.showIcon ?? true,\n } as BreakpointJSON;\n const bps = [...breakpoints].reverse();\n for (const bp of bps) {\n const bpData = this._value[bp];\n if (bpData) {\n if (bpData.label != null) result.label = bpData.label;\n if (bpData.renderAs != null) result.renderAs = bpData.renderAs;\n if (bpData.showIcon != null) result.showIcon = bpData.showIcon;\n if (bpData.showLabel != null) result.showLabel = bpData.showLabel;\n }\n if (bp === breakpoint) break;\n }\n return result;\n }\n\n private static cleanBreakpoint(bp?: BreakpointJSON): BreakpointJSON | null {\n if (!bp || !isObjectLike(bp)) return null;\n\n const result: BreakpointJSON = {};\n\n if (bp.renderAs !== undefined) result.renderAs = ActionDisplayStyle.fromAny(bp.renderAs);\n if (isString(bp.label)) result.label = bp.label;\n if (isBoolean(bp.showLabel)) result.showLabel = bp.showLabel;\n if (isBoolean(bp.showIcon)) result.showIcon = bp.showIcon;\n\n return Object.keys(result).length ? result : null;\n }\n}\n","import { Action as FormAction, ExecuteAction } from '@dynamicforms/vue-forms';\nimport { isString } from 'lodash-es';\n\nimport { ActionDisplayStyle } from './action-display-style';\nimport ResponsiveRenderOptions, { BreakpointsJSON } from './responsive-render-options';\n\nexport interface ActionJSON {\n // [key: `action${string}`]: ActionHandler;\n name?: string;\n label?: string;\n icon?: string;\n displayStyle?: BreakpointsJSON;\n field_name?: string;\n}\n\nexport interface ActionsJSON {\n [key: string]: ActionJSON;\n}\n\nclass Action {\n public readonly name: string;\n\n public displayStyle: ResponsiveRenderOptions;\n\n public formAction: FormAction;\n\n constructor(data: ActionJSON, formAction: FormAction) {\n if (data.name == null) throw new Error(`Action name must not be empty ${data}`);\n // any non-string or empty string must resolve as null for label\n const label = !isString(data.label) || data.label.length === 0 ? undefined : data.label;\n // any non-string or empty string must resolve as null for icon\n const icon = !isString(data.icon) || data.icon.length === 0 ? undefined : data.icon;\n\n this.name = data.name;\n this.displayStyle = new ResponsiveRenderOptions(data.displayStyle, label);\n this.formAction = formAction;\n\n this.formAction.icon = icon;\n this.formAction.label = label;\n }\n\n get label() {\n return this.formAction?.label;\n }\n\n get labelAvailable() {\n return this.formAction.label !== undefined;\n }\n\n get icon() {\n return this.formAction?.icon;\n }\n\n get iconAvailable() {\n return this.formAction.icon !== undefined;\n }\n\n static actionFormName(actionName: string): string {\n return `$action${actionName.charAt(0).toUpperCase()}${actionName.slice(1)}`;\n }\n\n private static makeFormAction(actionOrExecuteHandler?: FormAction | ExecuteAction): FormAction {\n let fa: FormAction;\n if (actionOrExecuteHandler instanceof ExecuteAction) {\n fa = FormAction.create().registerAction(actionOrExecuteHandler);\n } else if (actionOrExecuteHandler === undefined) {\n fa = FormAction.create();\n } else if (actionOrExecuteHandler instanceof FormAction) {\n fa = actionOrExecuteHandler;\n } else {\n throw new Error('actionOrExecuteHandler is not of any of supported types');\n }\n return fa;\n }\n\n static closeAction(data: ActionJSON, actionOrExecuteHandler?: FormAction | ExecuteAction) {\n return new Action(\n {\n name: 'close',\n label: 'Close', // TODO: needs translation\n icon: 'close-outline',\n displayStyle: { renderAs: ActionDisplayStyle.BUTTON, showLabel: true, showIcon: true },\n ...data, // any properties in data should overwrite properties in the constant\n },\n this.makeFormAction(actionOrExecuteHandler),\n );\n }\n\n static yesAction(data: ActionJSON, actionOrExecuteHandler?: FormAction | ExecuteAction) {\n return new Action(\n {\n name: 'yes',\n label: 'Yes', // TODO: needs translation\n icon: 'thumbs-up-outline',\n displayStyle: { renderAs: ActionDisplayStyle.BUTTON, showLabel: true, showIcon: true },\n ...data, // any properties in data should overwrite properties in the constant\n },\n this.makeFormAction(actionOrExecuteHandler),\n );\n }\n\n static noAction(data: ActionJSON, actionOrExecuteHandler?: FormAction | ExecuteAction) {\n return new Action(\n {\n name: 'no',\n label: 'No', // TODO: needs translation\n icon: 'thumbs-down-outline',\n displayStyle: { renderAs: ActionDisplayStyle.BUTTON, showLabel: true, showIcon: true },\n ...data, // any properties in data should overwrite properties in the constant\n },\n this.makeFormAction(actionOrExecuteHandler),\n );\n }\n}\n\nexport { Action };\n","<template>\n <div\n v-if=\"actionsRef.length > 0\"\n class=\"text-end\"\n :class=\"{\n 'button-group': showAsGroup === 'grouped' || showAsGroup === 'grouped-no-borders',\n 'with-border': showAsGroup === 'grouped',\n }\"\n >\n <v-btn\n v-for=\"(action, idx) in actionsRef\"\n :key=\"idx\"\n :variant=\"displayAsStyle(action) === ActionDisplayStyle.BUTTON ? 'tonal' : 'text'\"\n :elevation=\"0\"\n :class=\"idx !== -1 ? '' : 'ms-3'\"\n :size=\"buttonSize\"\n @click.stop=\"(event: MouseEvent) => action.formAction.execute(event)\"\n >\n <IonIcon v-if=\"displayIcon(action)\" class=\"action-icon\" :name=\"<string> action.formAction.icon\"/>\n <span v-if=\"displayIcon(action) && displayLabel(action)\" style=\"width: .5rem\"/>\n <span v-if=\"displayLabel(action)\">{{ labelText(action) }}</span>\n </v-btn>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, isRef, ref, Ref } from 'vue';\nimport IonIcon from 'vue-ionicon';\nimport { useDisplay } from 'vuetify';\n\nimport { Action, BreakpointJSON, BreakpointNames, ActionDisplayStyle } from './helpers';\n\ntype ShowAsGroup = 'no' | 'grouped' | 'grouped-no-borders';\n\ninterface ActionComponentProps {\n actions: Action[] | Ref<Action[]>;\n buttonSize?: string | number; // see https://vuetifyjs.com/en/api/v-btn/#props-size\n showAsGroup?: ShowAsGroup\n}\n\nconst props = withDefaults(defineProps<ActionComponentProps>(), {\n buttonSize: 'default',\n showAsGroup: 'no',\n});\n\nconst actionsRef = <Ref<Action[]>>(isRef(props.actions) ? props.actions : ref(props.actions));\n\nfunction getBreakpointName(dp: ReturnType<typeof useDisplay>): BreakpointNames {\n if (dp.xlAndUp.value) return 'xl';\n if (dp.lgAndUp.value) return 'lg';\n if (dp.mdAndUp.value) return 'md';\n if (dp.smAndUp.value) return 'sm';\n return 'xs';\n}\n\nconst display = useDisplay();\nconst displayStyle = computed(() => {\n const res: Record<string, BreakpointJSON> = {};\n res['%breakpoint%'] = getBreakpointName(display) as any;\n for (const action of actionsRef.value) {\n res[action.name] = action.displayStyle.getOptionsForBreakpoint(getBreakpointName(display));\n }\n return res;\n});\n\n/*\nfunction asText(action: Action) {\n return displayStyle.value[action.name].renderAs !== ActionDisplayStyle.BUTTON;\n}\n\nfunction buttonVariant(action: Action) {\n return displayStyle.value[action.name].renderAs === ActionDisplayStyle.BUTTON ? 'info' : 'link';\n}\n*/\n\nfunction displayIcon(action: Action): boolean {\n return (displayStyle.value[action.name].showIcon && action.iconAvailable) ?? true;\n}\n\nfunction displayLabel(action: Action): boolean {\n if (displayStyle.value[action.name].showLabel && action.labelAvailable) return true;\n return !displayIcon(action);\n}\n\nfunction displayAsStyle(action: Action) : ActionDisplayStyle {\n return displayStyle.value[action.name].renderAs ?? ActionDisplayStyle.BUTTON;\n}\n\nfunction labelText(action: Action): string {\n if (action.labelAvailable) return action.formAction.label ?? '';\n return action.name;\n}\n</script>\n\n<style scoped>\n.action-icon {\n width: 1.5em;\n height: 1.5em;\n}\n.button-group {\n border-radius: .5em;\n /* the following two make the container fit the small buttons. without them there would be a top margin */\n line-height: 0;\n height: fit-content;\n}\n.button-group .v-btn {\n border: none;\n border-radius: 0;\n margin: 0 !important;\n padding: 0 .25em;\n}\n.button-group .v-btn:first-child {\n border-start-start-radius: .5em;\n border-end-start-radius: .5em;\n}\n.button-group .v-btn:last-child {\n border-start-end-radius: .5em;\n border-end-end-radius: .5em;\n}\n.button-group.with-border {\n border: .1em solid currentColor;\n}\n.button-group.with-border .v-btn:not(:first-child) {\n border-inline-start: .1em solid currentColor;\n}\n.v-btn:not(:first-child) {\n margin-left: 1em;\n}\n</style>\n","<template>\n <v-checkbox\n v-model=\"boolValue\"\n v-bind=\"vuetifyBindings as any\"\n\n density=\"compact\"\n :indeterminate=\"indeterminate\"\n :false-value=\"false\"\n :true-value=\"true\"\n @change=\"change\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-checkbox>\n</template>\n\n<script setup lang=\"ts\">\nimport { clone } from 'lodash-es';\nimport { computed } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n allowNull?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\n\nconst indeterminate = computed(() => props.allowNull && (value.value == null));\n\nconst boolValue = computed({\n get(): any { return value.value; },\n set() { },\n});\n\nfunction change() {\n const oldVal = clone(value.value);\n if (oldVal === true) {\n value.value = props.allowNull ? null : false;\n } else {\n value.value = oldVal === false;\n }\n}\n</script>\n","<template>\n <v-menu\n v-model=\"dropdownShown\"\n location=\"top start\"\n origin=\"bottom start\"\n :close-on-content-click=\"false\"\n >\n <template #activator=\"{ props: menuProps }\">\n <v-text-field\n v-model=\"value\"\n v-bind=\"{ ...vuetifyBindings, ...menuProps } as any\"\n :clearable=\"allowNull\"\n type=\"text\"\n :rules=\"rules\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n <template #prepend-inner>\n <div\n style=\"width: 24px; height: 24px; border-radius: 4px; border: 1px solid #ccc;\"\n :style=\"{ backgroundColor: value }\"\n />\n </template>\n </v-text-field>\n </template>\n <v-color-picker v-model=\"value\" mode=\"hexa\"/>\n </v-menu>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n allowNull?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\n\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\nconst dropdownShown = ref(false);\n\nconst rules = computed<((val: string) => boolean | string)[]>(() => ([\n (val: string) => {\n if (!val && props.allowNull) return true;\n const regex = /^#?([a-fA-F0-9]{6}[a-fA-F0-9]{0,2})$/;\n return regex.test(val) ? true : 'Not a valid hex string.';\n },\n]));\n</script>\n","<template>\n <input-base v-bind=\"props\" clearable @click:clear=\"value = null\">\n <v-menu\n v-model=\"dropdownShown\"\n location=\"top start\"\n :origin=\"`bottom ${inputType === 'datetime' ? 'center' : 'start'}`\"\n :close-on-content-click=\"false\"\n >\n <template #activator=\"{ props: menuProps }\">\n <div class=\"d-flex w-100\">\n <v-text-field\n v-if=\"['date', 'datetime'].includes(inputType)\"\n v-model=\"dateFormatted\"\n style=\"flex-grow: 4\"\n :density=\"vuetifyBindings.density\"\n :variant=\"vuetifyBindings.variant\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-date`\"\n v-bind=\"menuProps\"\n @click=\"dropdown = 'date'\"\n @keydown.space=\"dropdown = 'date'\"\n />\n <v-text-field\n v-if=\"['time', 'datetime'].includes(inputType)\"\n v-model=\"timeFormatted\"\n style=\"flex-grow: 3\"\n :density=\"vuetifyBindings.density\"\n :variant=\"vuetifyBindings.variant\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-time`\"\n v-bind=\"menuProps\"\n @click=\"dropdown = 'time'\"\n @keydown.space=\"dropdown = 'time'\"\n />\n </div>\n </template>\n <v-confirm-edit\n v-if=\"dropdown === 'date'\"\n v-model=\"valueAsDate\"\n @cancel=\"dropdown = ''\"\n @save=\"dropdown = ''\"\n >\n <template #default=\"{ model: proxyModel, actions }\">\n <v-date-picker\n v-model=\"proxyModel.value\"\n :hide-header=\"true\"\n :first-day-of-week=\"1\"\n :show-adjacent-months=\"true\"\n :show-week=\"true\"\n >\n <template #actions><component :is=\"actions\"/></template>\n </v-date-picker>\n </template>\n </v-confirm-edit>\n <v-confirm-edit\n v-if=\"dropdown === 'time'\"\n v-model=\"valueAsTimeString\"\n @cancel=\"dropdown = ''\"\n @save=\"dropdown = ''\"\n >\n <template #default=\"{ model: proxyModel, actions }\">\n <v-time-picker\n v-model=\"proxyModel.value\"\n :hide-header=\"true\"\n format=\"24hr\"\n >\n <template #actions><component :is=\"actions\"/></template>\n </v-time-picker>\n </template>\n </v-confirm-edit>\n </v-menu>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { format, parse } from 'date-fns';\nimport { toNumber, isNaN } from 'lodash-es';\nimport { ref, computed, watch, toRefs, unref } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, InputBase, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n inputType?: 'datetime' | 'date' | 'time';\n displayFormatDate?: string;\n displayFormatTime?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n inputType: 'datetime',\n displayFormatDate: 'P',\n displayFormatTime: 'p',\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { value, vuetifyBindings } = useInputBase<string | null>(props, emits);\nconst { inputType, displayFormatDate, displayFormatTime } = toRefs(props);\n\nconst dropdown = ref('');\nconst dropdownShown = computed({\n get() { return unref(dropdown) !== ''; },\n set(newValue: boolean) { if (newValue) dropdown.value = 'date'; else dropdown.value = ''; },\n});\n\nconst formatNaive = (val: Date) => `${format(val, 'yyyy-MM-dd')}T${format(val, 'HH:mm')}:00`;\n\nconst valueISOFull = ref<string | null>(null);\nfunction setValueISOFull(newISOValue: string | null, dateOrTimeIdx: number) {\n if (newISOValue == null) {\n valueISOFull.value = null;\n } else if (dateOrTimeIdx === -1) {\n // setting valueISOFull from value\n if (unref(inputType) === 'time') {\n valueISOFull.value = formatNaive(new Date());\n setValueISOFull(`T${newISOValue}`, 1);\n } else {\n const val = formatNaive(new Date(newISOValue));\n setValueISOFull(val, 0);\n setValueISOFull(val, 1);\n }\n } else {\n if (valueISOFull.value == null) valueISOFull.value = formatNaive(new Date());\n const vif = valueISOFull.value.split(/[TZ]/g);\n const nv = newISOValue!.split(/[TZ]/g);\n vif[dateOrTimeIdx] = nv[dateOrTimeIdx];\n valueISOFull.value = formatNaive(new Date(`${vif[0]}T${vif[1].split('.')[0]}`));\n\n if (unref(inputType) === 'date') value.value = vif[0];\n else if (unref(inputType) === 'time') value.value = vif[1];\n else value.value = unref(valueISOFull) + format(new Date(), 'XXX');\n }\n}\nwatch(value, (newValue: string | null) => setValueISOFull(newValue, -1), { immediate: true });\n\nconst valueAsDate = computed({\n get() {\n const uValue = unref(valueISOFull);\n if (uValue == null) return null;\n const res = new Date(uValue);\n return !Number.isNaN(res.getTime()) ? res : null;\n },\n set(newValue: Date) { setValueISOFull(formatNaive(newValue), 0); },\n});\n\nconst valueAsTimeString = computed({\n get() {\n const val = unref(valueISOFull);\n if (val == null) return '';\n const vif = val.split(/[TZ]/g);\n return vif[1].split('.')[0];\n },\n set(newValue: string) { setValueISOFull(`T${newValue}`, 1); },\n});\n\nconst dateFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatDate));\n },\n set(newValue: string) {\n try {\n const d = parse(newValue, unref(displayFormatDate), new Date());\n setValueISOFull(formatNaive(d), 0);\n } catch (err) {\n console.error(err);\n }\n },\n});\n\nconst timeFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatTime));\n },\n set(newValue: string) {\n const d = newValue.match(/(\\d+):(\\d+)\\s?([a-zA-Z]+)?/);\n if (d == null) return;\n let hour = toNumber(d[1]);\n const minute = toNumber(d[2]);\n if (isNaN(hour) || isNaN(minute)) return;\n if (d[3] && d[3].toLowerCase() === 'pm' && hour < 13) hour += 12;\n setValueISOFull(`T${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:00`, 1);\n },\n});\n</script>\n\n<style scoped>\n</style>\n","<template>\n <input-base v-bind=\"props\" clearable @click:clear=\"removeFile\">\n <div style=\"position: relative; width: 100%\">\n <v-progress-linear\n v-if=\"currentFile && progress < 100\"\n :model-value=\"progress\"\n :indeterminate=\"progress === -1\"\n height=\"10\"\n style=\"position: absolute; top: 50%; transform: translateY(-50%); width: 100%;\"\n />\n <v-file-input\n v-model=\"selectedFile\"\n :label=\"fileLabel\"\n :density=\"vuetifyBindings.density\"\n :variant=\"vuetifyBindings.variant\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"vuetifyBindings.name\"\n :hide-details=\"true\"\n :show-size=\"true\"\n :multiple=\"false\"\n :style=\"currentFile && progress < 100 ? 'visibility: hidden' : ''\"\n :clearable=\"false\"\n @update:model-value=\"handleFileChange\"\n />\n </div>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onBeforeUnmount, watch } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, FileComms, InputBase, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n comms: FileComms;\n}\nconst props = withDefaults(defineProps<Props>(), defaultBaseProps);\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { value, vuetifyBindings } = useInputBase(props, emits);\nconst touchInterval = ref<number | null>(null);\n\n// State\nconst currentFile = ref<File | null>(null);\nconst progress = ref(0);\nconst fileInputKey = ref(Math.round(Math.random() * 1000));\nconst selectedFile = ref<File | null>();\n\nconst fileLabel = computed(() => {\n if (!selectedFile.value && value.value) {\n return props.modelValue;\n }\n return '';\n});\n\nfunction clearTouchInterval() { if (touchInterval.value) window.clearInterval(touchInterval.value); }\nfunction setupTouchInterval() {\n clearTouchInterval();\n touchInterval.value = window.setInterval(() => {\n if (value.value) props.comms.touch(value.value);\n }, 60 * 1000);\n}\n\nonBeforeUnmount(() => clearTouchInterval());\nwatch(value, (newValue) => { if (newValue) setupTouchInterval(); else clearTouchInterval(); });\n\nasync function removeFile() {\n if (value.value) {\n await props.comms.delete(value.value);\n }\n\n value.value = null;\n progress.value = 0;\n fileInputKey.value = Math.round(Math.random() * 1000);\n currentFile.value = null;\n selectedFile.value = null;\n clearTouchInterval();\n}\n\nasync function upload(file: File) {\n progress.value = -1;\n currentFile.value = file;\n\n try {\n value.value = await props.comms.upload(\n file,\n (loaded: number, total: number) => {\n progress.value = Math.round((loaded * 100) / total);\n },\n );\n progress.value = 100;\n setupTouchInterval();\n } catch (err) {\n progress.value = 0;\n currentFile.value = null;\n fileInputKey.value = Math.round(Math.random() * 1000);\n selectedFile.value = null;\n throw err;\n }\n}\n\nfunction handleFileChange(file: File | File[]): any {\n if (file) {\n if (Array.isArray(file)) {\n console.error('Uploading multiple files not supported right now');\n } else {\n upload(file);\n }\n }\n}\n</script>\n","<template>\n <div class=\"container\">\n <v-text-field\n v-if=\"!isNumber\"\n v-model=\"value\"\n v-bind=\"vuetifyBindings as any\"\n :type=\"inputType\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-text-field>\n <v-number-input\n v-else\n v-model=\"value\"\n v-bind=\"{ ...vuetifyBindings, ...numberInputBindings } as any\"\n density=\"compact\"\n control-variant=\"stacked\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-number-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, unref } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n inputType?: 'text' | 'password' | 'email' | 'url' | 'number';\n precision?: number | null;\n step?: number;\n min?: number;\n max?: number;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n inputType: 'text',\n precision: null,\n step: undefined,\n min: undefined,\n max: undefined,\n});\n\ninterface Emits extends BaseEmits {\n}\n\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\nconst { inputType, max, min, precision, step } = toRefs(props);\n\nconst isNumber = computed(() => inputType.value === 'number');\nconst numberInputBindings = computed(() => (\n !isNumber.value ? {} : { min: unref(min), max: unref(max), precision: unref(precision), step: unref(step) }\n));\n</script>\n\n<style scoped>\n.container {\n width: 100%;\n}\n</style>\n","<template>\n <div class=\"editor-container\">\n <div class=\"editor-container__editor\">\n <div ref=\"editorElement\">\n <ckeditor\n v-if=\"isLayoutReady\"\n :model-value=\"modelValue\"\n :editor=\"editor\"\n :config=\"editorConfig\"\n :disabled=\"disabled\"\n :style=\"`min-height: ${minHeight}`\"\n @ready=\"onEditorReady\"\n @update:model-value=\"(event: any) => emit('update:modelValue', event)\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Editor, EditorConfig } from '@ckeditor/ckeditor5-core';\nimport {\n ClassicEditor, AccessibilityHelp, Alignment, AutoImage, AutoLink, Autosave, BalloonToolbar, BlockQuote,\n Bold, CloudServices, Essentials, GeneralHtmlSupport, Heading, HorizontalLine, ImageBlock, ImageCaption,\n ImageInline, ImageInsertViaUrl, ImageResize, ImageStyle, ImageToolbar, ImageUpload, Indent, IndentBlock,\n Italic, Link, List, MediaEmbed, Paragraph, PasteFromMarkdownExperimental, PasteFromOffice, Autoformat,\n SelectAll, Style, Table, TableCellProperties, TableColumnResize, TableProperties, TableToolbar, Undo,\n HeadingConfig, TextTransformation, Base64UploadAdapter,\n} from 'ckeditor5';\nimport { ref, onMounted } from 'vue';\n\nwithDefaults(defineProps<{\n modelValue: string;\n minHeight?: string;\n disabled?: boolean;\n}>(), { modelValue: '', minHeight: '7em', disabled: false });\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>();\n\nconst isLayoutReady = ref(false);\nconst editor = ClassicEditor;\n\nconst editorToolbarConfig = {\n items: [\n 'undo', 'redo', '|',\n 'selectAll', '|',\n 'heading', 'style', '|',\n 'bold', 'italic', '|',\n 'horizontalLine', 'link', 'mediaEmbed', 'insertTable', 'blockQuote', '|',\n 'alignment', '|',\n 'bulletedList', 'numberedList', 'outdent', 'indent', '|',\n 'accessibilityHelp',\n ],\n shouldNotGroupWhenFull: false,\n};\nconst editorPlugins = [\n AccessibilityHelp, Alignment, AutoImage, AutoLink, Autosave, BalloonToolbar, BlockQuote, Bold, CloudServices,\n Essentials, GeneralHtmlSupport, Heading, HorizontalLine, ImageBlock, ImageCaption, ImageInline, ImageInsertViaUrl,\n ImageResize, ImageStyle, ImageToolbar, ImageUpload, Indent, IndentBlock, Italic, Link, List, Autoformat,\n MediaEmbed, Paragraph, PasteFromMarkdownExperimental, PasteFromOffice, SelectAll, Style, Table, TableCellProperties,\n TableColumnResize, TableProperties, TableToolbar, Undo, TextTransformation, Base64UploadAdapter,\n];\nconst editorHeadings: HeadingConfig = {\n options: [\n { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' },\n { model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' },\n { model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' },\n { model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' },\n { model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4' },\n { model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5' },\n { model: 'heading6', view: 'h6', title: 'Heading 6', class: 'ck-heading_heading6' },\n ],\n};\nconst editorConfig: EditorConfig = {\n toolbar: editorToolbarConfig,\n plugins: editorPlugins,\n balloonToolbar: ['bold', 'italic', '|', 'link', '|', 'bulletedList', 'numberedList'],\n heading: editorHeadings,\n htmlSupport: {\n allow: [\n { name: /^.*$/, styles: true, attributes: true, classes: true },\n ],\n },\n image: {\n toolbar: [\n 'toggleImageCaption', 'imageTextAlternative', '|',\n 'imageStyle:inline', 'imageStyle:wrapText', 'imageStyle:breakText', '|',\n 'resizeImage',\n ],\n },\n // initialData: '',\n link: {\n addTargetToExternalLinks: true,\n defaultProtocol: 'https://',\n decorators: {\n toggleDownloadable: {\n mode: 'manual',\n label: 'Downloadable',\n attributes: { download: 'file' },\n },\n },\n },\n placeholder: 'Type or paste your content here!',\n style: {\n definitions: [\n { name: 'Article category', element: 'h3', classes: ['category'] },\n { name: 'Title', element: 'h2', classes: ['document-title'] },\n { name: 'Subtitle', element: 'h3', classes: ['document-subtitle'] },\n { name: 'Info box', element: 'p', classes: ['info-box'] },\n { name: 'Side quote', element: 'blockquote', classes: ['side-quote'] },\n { name: 'Marker', element: 'span', classes: ['marker'] },\n { name: 'Spoiler', element: 'span', classes: ['spoiler'] },\n { name: 'Code (dark)', element: 'pre', classes: ['fancy-code', 'fancy-code-dark'] },\n { name: 'Code (bright)', element: 'pre', classes: ['fancy-code', 'fancy-code-bright'] },\n ],\n },\n table: { contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells', 'tableProperties', 'tableCellProperties'] },\n};\n\nonMounted(() => {\n isLayoutReady.value = true;\n});\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst onEditorReady = (editorReady: Editor) => {\n // console.log('Editor is ready to use!', editorReady);\n};\n\ndefineExpose({ onEditorReady });\n</script>\n\n<style>\n@import 'ckeditor5/ckeditor5.css';\n@import url('https://fonts.googleapis.com/css2?family=Oswald&family=PT+Serif:ital,wght@0,400;0,700;1,400&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');\n\n:root {\n /* In addition to this, any v-dialog must also have :retain-focus=\"false\" */\n --ck-z-default: 20000!important;\n --ck-z-modal: calc( var(--ck-z-default) + 20999 );\n}\n\n@media print {\n body {\n margin: 0 !important;\n }\n}\n\n.editor-container {\n font-family: 'Lato';\n}\n\n.ck-content {\n font-family: 'Lato';\n line-height: 1.6;\n word-break: break-word;\n}\n\n.editor-container, .editor-container__editor {\n width: 100%;\n}\n\n:root .ck-editor__editable_inline {\n min-height: v-bind(minHeight);\n}\n\n.ck-content h3.category {\n font-family: 'Oswald';\n font-size: 20px;\n font-weight: bold;\n color: #555;\n letter-spacing: 10px;\n margin: 0;\n padding: 0;\n}\n\n.ck-content h2.document-title {\n font-family: 'Oswald';\n font-size: 50px;\n font-weight: bold;\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n.ck-content h3.document-subtitle {\n font-family: 'Oswald';\n font-size: 20px;\n color: #555;\n margin: 0 0 1em;\n font-weight: bold;\n padding: 0;\n}\n\ndiv.ck.ck-editor__editable_inline * {\n /* disables any styles declared on the page prior to the editor */\n all: revert;\n}\n\n.ck-content p.info-box {\n --background-size: 30px;\n --background-color: #e91e63;\n padding: 1.2em 2em;\n border: 1px solid var(--background-color);\n background: linear-gradient(\n 135deg,\n var(--background-color) 0%,\n var(--background-color) var(--background-size),\n transparent var(--background-size)\n ),\n linear-gradient(\n 135deg,\n transparent calc(100% - var(--background-size)),\n var(--background-color) calc(100% - var(--background-size)),\n var(--background-color)\n );\n border-radius: 10px;\n margin: 1.5em 2em;\n box-shadow: 5px 5px 0 #ffe6ef;\n}\n\n.ck-content blockquote.side-quote {\n font-family: 'Oswald';\n font-style: normal;\n float: right;\n width: 35%;\n position: relative;\n border: 0;\n overflow: visible;\n z-index: 1;\n margin-left: 1em;\n}\n\n.ck-content blockquote.side-quote::before {\n content: '“';\n position: absolute;\n top: -37px;\n left: -10px;\n display: block;\n font-size: 200px;\n color: #e7e7e7;\n z-index: -1;\n line-height: 1;\n}\n\n.ck-content blockquote.side-quote p {\n font-size: 2em;\n line-height: 1;\n}\n\n.ck-content blockquote.side-quote p:last-child:not(:first-child) {\n font-size: 1.3em;\n text-align: right;\n color: #555;\n}\n\n.ck-content span.marker {\n background: yellow;\n}\n\n.ck-content span.spoiler {\n background: #000;\n color: #000;\n}\n\n.ck-content span.spoiler:hover {\n background: #000;\n color: #fff;\n}\n\n.ck-content pre.fancy-code {\n border: 0;\n margin-left: 2em;\n margin-right: 2em;\n border-radius: 10px;\n}\n\n.ck-content pre.fancy-code::before {\n content: '';\n display: block;\n height: 13px;\n background: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NCAxMyI+CiAgPGNpcmNsZSBjeD0iNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGMzZCNUMiLz4KICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGOUJFNEQiLz4KICA8Y2lyY2xlIGN4PSI0Ny41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiM1NkM0NTMiLz4KPC9zdmc+Cg==);\n margin-bottom: 8px;\n background-repeat: no-repeat;\n}\n\n.ck-content pre.fancy-code-dark {\n background: #272822;\n color: #fff;\n box-shadow: 5px 5px 0 #0000001f;\n}\n\n.ck-content pre.fancy-code-bright {\n background: #dddfe0;\n color: #000;\n box-shadow: 5px 5px 0 #b3b3b3;\n}\n</style>\n","<template>\n <input-base v-bind=\"props\">\n <ck-editor-custom ref=\"$editor\" v-model=\"value\" :min-height=\"minHeight\" :disabled=\"vuetifyBindings.disabled\"/>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { BaseEmits, BaseProps, defaultBaseProps, InputBase, useInputBase } from './helpers';\nimport CkEditorCustom from './helpers/ck-editor-custom.vue';\n\ninterface Props extends BaseProps {\n minHeight?: string;\n}\nconst props = withDefaults(defineProps<Props>(), { ...defaultBaseProps, minHeight: undefined });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { value, vuetifyBindings } = useInputBase(props, emits);\n</script>\n","import { isArray, first, castArray } from 'lodash-es';\nimport { Ref } from 'vue';\n\nimport { SelectChoice } from './df-select.interface';\n\nexport function convertItems(items: SelectChoice[]) {\n return items.map((item) => ({ value: item.id, title: item.text, icon: item.icon }));\n}\n\n/**\n * multipleCompliantValue ensures that resulting value of the select component is\n * 1 - null, when nothing is selected\n * 2 - array, when multiple is truthy\n * 3 - ordinal / simple value when multiple is not truthy\n * @param value the value to make compliant\n * @param multiple indicator for multiple selection\n */\nexport function multipleCompliantValue(value: any, multiple: boolean): any {\n // Če je vrednost null ali undefined\n if (value == null) return null;\n\n // Če je prazno polje (za multiple)\n if (isArray(value) && value.length === 0) return null;\n\n // Za multiple vedno vrni polje\n if (multiple) return castArray(value);\n\n // Za single vrni prvo vrednost ali vrednost samo\n return isArray(value) ? (first(value) ?? null) : value;\n}\n\nexport function getSelectedChoices(loadedChoices: SelectChoice[], multipleCpliantValue: any | any[] | null) {\n if (multipleCpliantValue == null) return [];\n const mcValue = castArray(multipleCpliantValue);\n return loadedChoices.filter((choice) => mcValue.some((val: any) => val === choice.id));\n}\n\n/**\n * updateSelectedFromValue ensures that the actual select component receives model-value formatted to its needs\n */\nexport function updateSelectedFromValue(\n resultingValue: any,\n selected: Ref<any>,\n multiple: boolean,\n taggable: boolean,\n loadedChoices: SelectChoice[],\n) {\n const mcValue = multipleCompliantValue(resultingValue, multiple);\n\n if (mcValue == null) {\n selected.value = multiple ? [] : null;\n return;\n }\n\n if (multiple) {\n if (taggable) {\n // if taggable (can add new items not in choices), keep the value as-is\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n selected.value = getSelectedChoices(loadedChoices, mcValue).map((choice) => choice.id);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (taggable) {\n // if taggable, we just keep the selected value\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n const matchingChoice = first(getSelectedChoices(loadedChoices, mcValue));\n selected.value = matchingChoice?.id ?? null;\n }\n }\n}\n","<template>\n <component\n :is=\"taggable ? 'v-combobox' : 'v-autocomplete'\"\n v-if=\"visibility !== DisplayMode.SUPPRESS\"\n v-model=\"selected\"\n\n :class=\"[\n cssClass,\n {\n 'd-none': visibility === DisplayMode.HIDDEN,\n invisible: visibility === DisplayMode.INVISIBLE,\n },\n ]\"\n\n :items=\"options\"\n :return-object=\"false\"\n\n v-bind=\"vuetifyBindings\"\n :label=\"vuetifyBindings.label\"\n\n chips\n :auto-select-first=\"true\"\n :closable-chips=\"allowNull || (multiple && selected.length > 1)\"\n :clearable=\"allowNull\"\n :multiple=\"multiple\"\n :loading=\"loading\"\n :hide-selected=\"false\"\n :aria-describedby=\"vuetifyBindings.helpText ? `${vuetifyBindings.name}-help` : null\"\n :menu-props=\"{ maxHeight: '400' }\"\n hide-details=\"auto\"\n @update:search=\"(query: any) => queryOptions(query, undefined)\"\n @update:model-value=\"onSelect\"\n @click:clear=\"selected = null\"\n >\n <template #chip=\"{ item }\">\n <v-chip\n :key=\"item.value\"\n label\n size=\"small\"\n class=\"d-flex align-middle\"\n :variant=\"multiple ? 'tonal' : 'text'\"\n :closable=\"multiple\"\n @click:close=\"chipClose(item.value)\"\n >\n <template #prepend>\n <IonIcon v-if=\"item.raw?.icon\" class=\"me-1 action-icon d-inline-block\" :name=\"item.raw.icon\"/>\n </template>\n <span :class=\"{ 'text-body-1': !multiple }\">{{ item.title }}</span>\n </v-chip>\n </template>\n\n <template #item=\"{ props: prps, item }\">\n <v-list-item v-bind=\"prps\">\n <template #prepend>\n <span v-if=\"item.raw?.icon\" class=\"me-1\">\n <IonIcon class=\"action-icon d-inline-block\" :name=\"item.raw.icon\"/>\n </span>\n </template>\n </v-list-item>\n </template>\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { ref, computed, toRefs, watch, nextTick } from 'vue';\nimport IonIcon from 'vue-ionicon';\n\nimport {\n BaseEmits,\n BaseProps,\n defaultBaseProps,\n MessagesWidget,\n SelectChoice,\n SelectFetchChoices,\n useInputBase,\n} from './helpers';\nimport {\n convertItems,\n getSelectedChoices,\n multipleCompliantValue,\n updateSelectedFromValue,\n} from './helpers/df-select.helper';\n\ninterface Props extends BaseProps {\n choices?: SelectChoice[];\n multiple?: boolean;\n allowTags?: boolean;\n allowNull?: boolean;\n fetchChoices?: SelectFetchChoices;\n}\n\nconst propsWithDefaults = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n choices: undefined,\n multiple: false,\n allowTags: false,\n allowNull: true,\n fetchChoices: undefined,\n});\n\nconst { choices } = propsWithDefaults;\nconst { multiple, allowTags: taggable, allowNull, cssClass, visibility } = toRefs(propsWithDefaults);\n\ninterface Emits extends BaseEmits {\n (e: 'update:modelValueDisplay', value: SelectChoice[]): any;\n}\n\nconst emits = defineEmits<Emits>();\n\nconst { errors, value: resultingValue, vuetifyBindings } = useInputBase(propsWithDefaults, emits);\n\nconst selected = ref<any>(null);\nconst loadedChoices = ref<SelectChoice[]>(choices || []);\nconst loading = ref<boolean>(false);\n\nconst options = computed(() => convertItems(loadedChoices.value));\n\nfunction emitModelValueDisplay(mcVal: any) {\n emits('update:modelValueDisplay', getSelectedChoices(loadedChoices.value, mcVal));\n}\n\nwatch(selected, (newValue) => {\n if (vuetifyBindings.value.readonly) return;\n nextTick(() => {\n const mcVal = multipleCompliantValue(newValue, multiple.value);\n emitModelValueDisplay(mcVal);\n resultingValue.value = mcVal;\n });\n}, { deep: true });\n\nfunction onSelect(/* val: any */) {\n if (vuetifyBindings.value.readonly || taggable.value) return;\n const mcVal = multipleCompliantValue(selected.value, multiple.value);\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n resultingValue.value = mcVal;\n}\n\nfunction chipClose(itemValue: any) {\n let mcVal;\n if (multiple.value && Array.isArray(selected.value)) {\n mcVal = multipleCompliantValue(selected.value.filter((v) => v !== itemValue), multiple.value);\n } else {\n mcVal = null;\n }\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n resultingValue.value = mcVal;\n}\n\nasync function queryOptions(queryValue?: any, idValue?: any): Promise<void> {\n if (choices || propsWithDefaults.fetchChoices === undefined) return;\n loading.value = true;\n try {\n loadedChoices.value = await propsWithDefaults.fetchChoices(queryValue, idValue);\n } finally {\n loading.value = false;\n }\n}\n\nfunction initialValueCheck() {\n let val = resultingValue.value;\n if (!allowNull.value && val == null && options.value.length) {\n // Starting settings: check if value is mandatory and select the first item from the options\n val = options.value[0].value;\n }\n val = multipleCompliantValue(val, multiple.value);\n updateSelectedFromValue(val, selected, multiple.value, taggable.value, loadedChoices.value);\n emitModelValueDisplay(val);\n resultingValue.value = val;\n}\n\ninitialValueCheck();\n\n// Starting settings: check if ajax and current value is not loaded yet - then load the value from back-end\nif (propsWithDefaults.fetchChoices !== undefined) {\n queryOptions(undefined, resultingValue.value).then(() => {\n initialValueCheck();\n });\n}\n</script>\n<style scoped>\n.action-icon {\n width: 1.5em;\n height: 1.5em;\n}\n</style>\n","<template>\n <div class=\"container\">\n <v-textarea\n v-if=\"visibility !== DisplayMode.SUPPRESS\"\n v-model=\"value\"\n :class=\"[\n cssClass,\n {\n 'd-none': visibility === DisplayMode.HIDDEN,\n invisible: visibility === DisplayMode.INVISIBLE,\n },\n ]\"\n\n :rows=\"rows\"\n :auto-grow=\"(maxRows || 0) > 0\"\n :max-rows=\"maxRows\"\n v-bind=\"vuetifyBindings as any\"\n >\n <template #message=\"{ message }\"><messages-widget :message=\"message\" :errors=\"errors\"/></template>\n </v-textarea>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { toRefs } from 'vue';\n\nimport { BaseEmits, BaseProps, defaultBaseProps, MessagesWidget, useInputBase } from './helpers';\n\ninterface Props extends BaseProps {\n rows?: number;\n maxRows?: number;\n}\nconst props = withDefaults(defineProps<Props>(), {\n ...defaultBaseProps,\n rows: undefined,\n maxRows: undefined,\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { errors, value, vuetifyBindings } = useInputBase(props, emits);\nconst { cssClass, visibility } = toRefs(props);\n</script>\n\n<style scoped>\n.container {\n width: 100%;\n}\n</style>\n","import { CkeditorPlugin } from '@ckeditor/ckeditor5-vue';\nimport { App } from 'vue';\n\nimport * as Inputs from './dynamicforms-components';\nimport * as VuetifyComponents from './vuetify-components';\n\nexport * from './helpers';\nexport * as VuetifyComponents from './vuetify-components';\nexport * from './dynamicforms-components';\n\nexport interface DynamicFormsInputsOptions {\n registerComponents: boolean;\n registerVuetifyComponents: boolean;\n}\n\nexport const DynamicFormsInputs = {\n install: (app: App, options?: Partial<DynamicFormsInputsOptions>) => {\n app.use(CkeditorPlugin);\n if (options?.registerComponents ?? false) {\n Object.entries(Inputs).map(([name, component]) => app.component(name, component));\n }\n if (options?.registerVuetifyComponents ?? false) {\n Object.entries(VuetifyComponents).map(([name, component]) => app.component(name, component));\n }\n },\n};\n"],"names":["_","index","appendExtraPluginsToEditorConfig","config","plugins","extraPlugins","__spreadProps","__spreadValues","item","isSemanticVersion","version","isCKCdnTestingVersion","testVersion","isCKCdnVersion","destructureSemanticVersion","major","minor","patch","getLicenseVersionFromEditorVersion","getCKBaseBundleInstallationInfo","CKEDITOR_VERSION","CKEDITOR","getSupportedLicenseVersionInstallationInfo","installationInfo","isCKEditorFreeLicense","licenseKey","licenseVersion","createIntegrationUsageDataPlugin","integrationName","usageData","editor","source","setUsageData","VueIntegrationUsageDataPlugin","appendAllIntegrationPluginsToConfig","editorConfig","VUE_INTEGRATION_READ_ONLY_LOCK_ID","INPUT_EVENT_DEBOUNCE_WAIT","_sfc_main","defineComponent","mergeModels","__props","__expose","__emit","model","useModel","props","emit","element","ref","instance","lastEditorData","watch","newModel","readOnlyMode","checkVersion","version2","setUpEditorEvents","emitDebouncedInputEvent","debounce","evt","data","onMounted","markRaw","error","onBeforeUnmount","_ctx","_cache","openBlock","createBlock","resolveDynamicComponent","Vue","CkeditorPlugin","app","defaultBaseProps","useInputBase","value","computed","newValue","Form","valid","errors","ValidationErrorRenderContent","anyErrors","enabled","visibility","label","placeholder","helpText","hint","cssClass","_a","isEmpty","emits","vuetifyBindings","isClearable","unref","ActionDisplayStyle","defaultDisplayStyle","fromString","mode","fromAny","input","isDefined","check","breakpoints","ResponsiveRenderOptions","__publicField","baseOptions","bp","options","breakpoint","result","_b","_c","bps","bpData","isObjectLike","isString","isBoolean","Action","formAction","icon","actionName","actionOrExecuteHandler","fa","ExecuteAction","FormAction","actionsRef","isRef","getBreakpointName","dp","display","useDisplay","displayStyle","res","action","displayIcon","displayLabel","displayAsStyle","labelText","indeterminate","boolValue","change","oldVal","clone","dropdownShown","rules","val","inputType","displayFormatDate","displayFormatTime","toRefs","dropdown","formatNaive","format","valueISOFull","setValueISOFull","newISOValue","dateOrTimeIdx","vif","nv","valueAsDate","uValue","valueAsTimeString","dateFormatted","vad","d","parse","err","timeFormatted","hour","toNumber","minute","isNaN","touchInterval","currentFile","progress","fileInputKey","selectedFile","fileLabel","clearTouchInterval","setupTouchInterval","removeFile","__async","upload","file","loaded","total","handleFileChange","max","min","precision","step","isNumber","numberInputBindings","isLayoutReady","ClassicEditor","editorToolbarConfig","editorPlugins","AccessibilityHelp","Alignment","AutoImage","AutoLink","Autosave","BalloonToolbar","BlockQuote","Bold","CloudServices","Essentials","GeneralHtmlSupport","Heading","HorizontalLine","ImageBlock","ImageCaption","ImageInline","ImageInsertViaUrl","ImageResize","ImageStyle","ImageToolbar","ImageUpload","Indent","IndentBlock","Italic","Link","List","Autoformat","MediaEmbed","Paragraph","PasteFromMarkdownExperimental","PasteFromOffice","SelectAll","Style","Table","TableCellProperties","TableColumnResize","TableProperties","TableToolbar","Undo","TextTransformation","Base64UploadAdapter","onEditorReady","editorReady","convertItems","items","multipleCompliantValue","multiple","isArray","castArray","first","getSelectedChoices","loadedChoices","multipleCpliantValue","mcValue","choice","updateSelectedFromValue","resultingValue","selected","taggable","matchingChoice","propsWithDefaults","choices","allowNull","loading","emitModelValueDisplay","mcVal","nextTick","onSelect","chipClose","itemValue","v","queryOptions","queryValue","idValue","initialValueCheck","DynamicFormsInputs","Inputs","name","component","VuetifyComponents"],"mappings":"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","x_google_ignoreList":[0,1]}
|