From 0fefc5e2e1301bfb452f0f3ee63a4d23057a77f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Nicou=C3=A9?= Date: Fri, 11 Jul 2025 14:41:34 +0200 Subject: [PATCH] Update to Kirby 5 --- composer.json | 2 +- composer.lock | 51 +- kirby/.editorconfig | 4 + kirby/bootstrap.php | 13 +- kirby/composer.json | 11 +- kirby/composer.lock | 38 +- kirby/config/aliases.php | 4 +- kirby/config/api/authentication.php | 6 +- kirby/config/api/routes.php | 30 +- kirby/config/api/routes/auth.php | 20 +- kirby/config/api/routes/changes.php | 37 + kirby/config/api/routes/files.php | 2 +- kirby/config/api/routes/lock.php | 56 - kirby/config/api/routes/system.php | 28 +- kirby/config/api/routes/users.php | 34 +- kirby/config/areas/account.php | 1 + kirby/config/areas/account/buttons.php | 13 + kirby/config/areas/account/dialogs.php | 1 - kirby/config/areas/account/dropdowns.php | 8 + kirby/config/areas/account/views.php | 3 + kirby/config/areas/files/buttons.php | 14 + kirby/config/areas/files/dialogs.php | 9 +- kirby/config/areas/files/dropdowns.php | 5 + kirby/config/areas/lab/drawers.php | 7 +- kirby/config/areas/lab/views.php | 112 +- kirby/config/areas/languages.php | 1 + kirby/config/areas/languages/buttons.php | 21 + kirby/config/areas/languages/dialogs.php | 108 +- kirby/config/areas/languages/views.php | 15 +- kirby/config/areas/site.php | 1 + kirby/config/areas/site/buttons.php | 72 + kirby/config/areas/site/dialogs.php | 72 +- kirby/config/areas/site/dropdowns.php | 25 + kirby/config/areas/site/requests.php | 83 +- kirby/config/areas/site/searches.php | 45 +- kirby/config/areas/site/views.php | 71 + kirby/config/areas/system/dialogs.php | 2 +- kirby/config/areas/system/views.php | 8 +- kirby/config/areas/users.php | 1 + kirby/config/areas/users/buttons.php | 20 + kirby/config/areas/users/dialogs.php | 9 +- kirby/config/areas/users/dropdowns.php | 13 +- kirby/config/areas/users/searches.php | 21 +- kirby/config/areas/users/views.php | 7 +- kirby/config/components.php | 60 +- kirby/config/fields/color.php | 76 +- kirby/config/fields/date.php | 36 +- kirby/config/fields/link.php | 14 +- kirby/config/fields/mixins/layout.php | 7 +- kirby/config/fields/mixins/options.php | 2 +- kirby/config/fields/mixins/upload.php | 12 +- kirby/config/fields/number.php | 2 +- kirby/config/fields/object.php | 8 +- kirby/config/fields/radio.php | 3 +- kirby/config/fields/select.php | 2 +- kirby/config/fields/structure.php | 48 +- kirby/config/fields/text.php | 13 +- kirby/config/fields/textarea.php | 19 +- kirby/config/fields/time.php | 38 +- kirby/config/fields/toggle.php | 9 +- kirby/config/fields/writer.php | 16 +- kirby/config/helpers.php | 2 +- kirby/config/methods.php | 21 +- kirby/config/presets/pages.php | 27 +- kirby/config/routes.php | 4 +- kirby/config/sections/fields.php | 42 +- kirby/config/sections/files.php | 49 +- kirby/config/sections/mixins/batch.php | 45 + kirby/config/sections/mixins/layout.php | 2 +- kirby/config/sections/mixins/parent.php | 8 +- kirby/config/sections/mixins/sort.php | 2 +- kirby/config/sections/pages.php | 41 +- kirby/config/tags.php | 14 +- kirby/i18n/translations/bg.json | 5 + kirby/i18n/translations/bs.json | 799 ++ kirby/i18n/translations/ca.json | 5 + kirby/i18n/translations/cs.json | 5 + kirby/i18n/translations/da.json | 5 + kirby/i18n/translations/de.json | 9 +- kirby/i18n/translations/el.json | 5 + kirby/i18n/translations/en.json | 59 +- kirby/i18n/translations/eo.json | 5 + kirby/i18n/translations/es_419.json | 5 + kirby/i18n/translations/es_ES.json | 5 + kirby/i18n/translations/fa.json | 5 + kirby/i18n/translations/fi.json | 5 + kirby/i18n/translations/fr.json | 85 +- kirby/i18n/translations/hu.json | 5 + kirby/i18n/translations/id.json | 5 + kirby/i18n/translations/is_IS.json | 5 + kirby/i18n/translations/it.json | 5 + kirby/i18n/translations/ko.json | 5 + kirby/i18n/translations/lt.json | 5 + kirby/i18n/translations/nb.json | 5 + kirby/i18n/translations/nl.json | 5 + kirby/i18n/translations/pl.json | 65 +- kirby/i18n/translations/pt_BR.json | 5 + kirby/i18n/translations/pt_PT.json | 5 + kirby/i18n/translations/ro.json | 5 + kirby/i18n/translations/ru.json | 5 + kirby/i18n/translations/sk.json | 5 + kirby/i18n/translations/sr@latin.json | 799 ++ kirby/i18n/translations/sv_SE.json | 33 +- kirby/i18n/translations/tr.json | 5 + kirby/i18n/translations/zh_TW.json | 799 ++ kirby/panel/dist/css/style.min.css | 2 +- kirby/panel/dist/img/icons.svg | 78 +- kirby/panel/dist/js/Docs.min.js | 2 +- kirby/panel/dist/js/DocsView.min.js | 2 +- kirby/panel/dist/js/Highlight.min.js | 2 +- kirby/panel/dist/js/IndexView.min.js | 2 +- kirby/panel/dist/js/PlaygroundView.min.js | 2 +- .../js/container-query-polyfill.modern.min.js | 1 - kirby/panel/dist/js/index.min.js | 2 +- kirby/panel/dist/js/plugins.js | 115 + kirby/panel/dist/js/sortable.esm.min.js | 7 + kirby/panel/dist/js/vendor.min.js | 17 +- kirby/panel/dist/js/vue.esm.browser.js | 11731 ++++++++++++++++ kirby/panel/dist/js/vue.esm.browser.min.js | 11 + kirby/panel/dist/js/vue.min.js | 11 - kirby/panel/dist/js/vue.runtime.esm.min.js | 6 + kirby/panel/dist/js/vue.runtime.min.js | 11 - kirby/panel/dist/js/vuedraggable.min.js | 7 - kirby/src/Api/Api.php | 161 +- kirby/src/Api/Collection.php | 6 +- kirby/src/Api/Controller/Changes.php | 137 + kirby/src/Api/Model.php | 8 +- kirby/src/Api/Upload.php | 436 + kirby/src/Blueprint/Collection.php | 97 - kirby/src/Blueprint/Config.php | 75 - kirby/src/Blueprint/Extension.php | 65 - kirby/src/Blueprint/Factory.php | 119 - kirby/src/Blueprint/Node.php | 117 - kirby/src/Blueprint/NodeI18n.php | 44 - kirby/src/Blueprint/NodeIcon.php | 27 - kirby/src/Blueprint/NodeProperty.php | 27 - kirby/src/Blueprint/NodeString.php | 39 - kirby/src/Blueprint/NodeText.php | 30 - kirby/src/Cache/ApcuCache.php | 8 +- kirby/src/Cache/Cache.php | 21 +- kirby/src/Cache/FileCache.php | 19 +- kirby/src/Cache/MemCached.php | 15 +- kirby/src/Cache/MemoryCache.php | 8 +- kirby/src/Cache/NullCache.php | 8 +- kirby/src/Cache/RedisCache.php | 160 + kirby/src/Cache/Value.php | 2 +- kirby/src/Cms/Api.php | 16 +- kirby/src/Cms/App.php | 346 +- kirby/src/Cms/AppCaches.php | 20 +- kirby/src/Cms/AppErrors.php | 9 +- kirby/src/Cms/AppPlugins.php | 258 +- kirby/src/Cms/AppTranslations.php | 29 +- kirby/src/Cms/AppUsers.php | 28 +- kirby/src/Cms/Auth.php | 152 +- kirby/src/Cms/Auth/EmailChallenge.php | 32 +- kirby/src/Cms/Auth/Status.php | 50 +- kirby/src/Cms/Block.php | 40 +- kirby/src/Cms/BlockConverter.php | 14 +- kirby/src/Cms/Blocks.php | 19 +- kirby/src/Cms/Blueprint.php | 69 +- kirby/src/Cms/Collection.php | 165 +- kirby/src/Cms/Collections.php | 15 +- kirby/src/Cms/ContentLock.php | 222 - kirby/src/Cms/ContentLocks.php | 210 - kirby/src/Cms/Core.php | 75 +- kirby/src/Cms/Email.php | 40 +- kirby/src/Cms/Event.php | 65 +- kirby/src/Cms/Events.php | 130 + kirby/src/Cms/Fieldset.php | 29 +- kirby/src/Cms/Fieldsets.php | 4 +- kirby/src/Cms/File.php | 149 +- kirby/src/Cms/FileActions.php | 264 +- kirby/src/Cms/FileBlueprint.php | 26 +- kirby/src/Cms/FileModifications.php | 17 +- kirby/src/Cms/FilePermissions.php | 10 +- kirby/src/Cms/FilePicker.php | 12 +- kirby/src/Cms/FileRules.php | 230 +- kirby/src/Cms/FileVersion.php | 11 +- kirby/src/Cms/Files.php | 69 +- kirby/src/Cms/Find.php | 63 +- kirby/src/Cms/HasFiles.php | 7 +- kirby/src/Cms/HasMethods.php | 10 +- kirby/src/Cms/HasModels.php | 53 + kirby/src/Cms/HasSiblings.php | 138 +- kirby/src/Cms/Helpers.php | 36 +- kirby/src/Cms/Html.php | 16 +- kirby/src/Cms/Ingredients.php | 11 +- kirby/src/Cms/Item.php | 3 + kirby/src/Cms/Items.php | 11 +- kirby/src/Cms/Language.php | 278 +- kirby/src/Cms/LanguagePermissions.php | 22 + kirby/src/Cms/LanguageRouter.php | 6 +- kirby/src/Cms/LanguageRoutes.php | 9 +- kirby/src/Cms/LanguageRules.php | 90 +- kirby/src/Cms/LanguageVariable.php | 33 +- kirby/src/Cms/Languages.php | 29 +- kirby/src/Cms/Layout.php | 2 + kirby/src/Cms/LayoutColumn.php | 2 + kirby/src/Cms/LayoutColumns.php | 2 + kirby/src/Cms/Layouts.php | 2 + kirby/src/Cms/License.php | 52 +- kirby/src/Cms/LicenseStatus.php | 27 +- kirby/src/Cms/Loader.php | 37 +- kirby/src/Cms/Media.php | 18 +- kirby/src/Cms/Model.php | 117 - kirby/src/Cms/ModelCommit.php | 243 + kirby/src/Cms/ModelPermissions.php | 80 +- kirby/src/Cms/ModelState.php | 107 + kirby/src/Cms/ModelWithContent.php | 557 +- kirby/src/Cms/NestCollection.php | 6 +- kirby/src/Cms/Page.php | 354 +- kirby/src/Cms/PageActions.php | 579 +- kirby/src/Cms/PageBlueprint.php | 6 +- kirby/src/Cms/PageCopy.php | 236 + kirby/src/Cms/PagePermissions.php | 10 +- kirby/src/Cms/PagePicker.php | 19 +- kirby/src/Cms/PageRules.php | 330 +- kirby/src/Cms/PageSiblings.php | 53 +- kirby/src/Cms/Pages.php | 120 +- kirby/src/Cms/Pagination.php | 42 +- kirby/src/Cms/Permissions.php | 25 +- kirby/src/Cms/Picker.php | 2 +- kirby/src/Cms/Responder.php | 14 +- kirby/src/Cms/Role.php | 32 +- kirby/src/Cms/Roles.php | 19 +- kirby/src/Cms/Section.php | 15 +- kirby/src/Cms/Site.php | 102 +- kirby/src/Cms/SiteActions.php | 61 +- kirby/src/Cms/SitePermissions.php | 2 +- kirby/src/Cms/SiteRules.php | 24 +- kirby/src/Cms/Structure.php | 2 + kirby/src/Cms/StructureObject.php | 10 +- kirby/src/Cms/System.php | 25 +- kirby/src/Cms/System/UpdateStatus.php | 50 +- kirby/src/Cms/Translation.php | 19 +- kirby/src/Cms/Translations.php | 8 +- kirby/src/Cms/User.php | 165 +- kirby/src/Cms/UserActions.php | 216 +- kirby/src/Cms/UserPermissions.php | 24 +- kirby/src/Cms/UserPicker.php | 19 +- kirby/src/Cms/UserRules.php | 219 +- kirby/src/Cms/Users.php | 16 +- kirby/src/Content/Changes.php | 197 + kirby/src/Content/Content.php | 31 +- kirby/src/Content/ContentStorage.php | 314 - kirby/src/Content/ContentStorageHandler.php | 96 - kirby/src/Content/ContentTranslation.php | 173 - kirby/src/Content/Field.php | 40 +- kirby/src/Content/ImmutableMemoryStorage.php | 90 + kirby/src/Content/Lock.php | 229 + kirby/src/Content/LockedContentException.php | 31 + kirby/src/Content/MemoryStorage.php | 99 + .../PlainTextContentStorageHandler.php | 253 - kirby/src/Content/PlainTextStorage.php | 331 + kirby/src/Content/Storage.php | 325 + kirby/src/Content/Translation.php | 191 + kirby/src/Content/Translations.php | 79 + kirby/src/Content/Version.php | 687 + kirby/src/Content/VersionCache.php | 81 + kirby/src/Content/VersionId.php | 121 + kirby/src/Content/VersionRules.php | 161 + kirby/src/Content/Versions.php | 49 + kirby/src/Data/Data.php | 47 +- kirby/src/Data/Handler.php | 4 +- kirby/src/Data/Json.php | 21 +- kirby/src/Data/PHP.php | 52 +- kirby/src/Data/Txt.php | 22 +- kirby/src/Data/Xml.php | 6 +- kirby/src/Data/Yaml.php | 5 +- kirby/src/Data/YamlSpyc.php | 2 +- kirby/src/Database/Database.php | 42 +- kirby/src/Database/Db.php | 4 +- kirby/src/Database/Query.php | 122 +- kirby/src/Database/Sql.php | 170 +- kirby/src/Database/Sql/Sqlite.php | 29 +- kirby/src/Email/Email.php | 4 +- kirby/src/Email/PHPMailer.php | 4 +- kirby/src/Exception/AuthException.php | 1 - .../src/Exception/BadMethodCallException.php | 1 - kirby/src/Exception/DuplicateException.php | 1 - kirby/src/Exception/ErrorPageException.php | 3 +- kirby/src/Exception/Exception.php | 177 +- .../Exception/InvalidArgumentException.php | 1 - kirby/src/Exception/LogicException.php | 1 - kirby/src/Exception/NotFoundException.php | 1 - kirby/src/Exception/PermissionException.php | 1 - kirby/src/Field/FieldOptions.php | 38 +- kirby/src/Filesystem/Asset.php | 37 +- kirby/src/Filesystem/Dir.php | 30 +- kirby/src/Filesystem/F.php | 149 +- kirby/src/Filesystem/File.php | 87 +- kirby/src/Filesystem/Filename.php | 14 +- kirby/src/Filesystem/IsFile.php | 22 +- kirby/src/Filesystem/Mime.php | 81 +- kirby/src/Form/Field.php | 325 +- kirby/src/Form/Field/BlocksField.php | 138 +- kirby/src/Form/Field/EntriesField.php | 211 + kirby/src/Form/Field/LayoutField.php | 116 +- kirby/src/Form/FieldClass.php | 344 +- kirby/src/Form/Fields.php | 392 +- kirby/src/Form/Form.php | 453 +- kirby/src/Form/Mixin/Api.php | 19 + kirby/src/Form/Mixin/Min.php | 15 + kirby/src/Form/Mixin/Model.php | 35 + kirby/src/Form/Mixin/Translatable.php | 47 + kirby/src/Form/Mixin/Validation.php | 117 + kirby/src/Form/Mixin/Value.php | 220 + kirby/src/Form/Mixin/When.php | 58 + kirby/src/Form/Validations.php | 70 +- kirby/src/Http/Cookie.php | 32 +- kirby/src/Http/Environment.php | 38 +- kirby/src/Http/Header.php | 7 +- kirby/src/Http/Params.php | 9 +- kirby/src/Http/Path.php | 4 +- kirby/src/Http/Query.php | 3 +- kirby/src/Http/Remote.php | 24 +- kirby/src/Http/Request.php | 8 +- kirby/src/Http/Request/Auth.php | 3 +- kirby/src/Http/Request/Body.php | 6 +- kirby/src/Http/Request/Query.php | 4 +- kirby/src/Http/Response.php | 14 +- kirby/src/Http/Route.php | 4 +- kirby/src/Http/Router.php | 16 +- kirby/src/Http/Uri.php | 25 +- kirby/src/Http/Url.php | 7 +- kirby/src/Http/Visitor.php | 2 +- kirby/src/Image/Camera.php | 4 +- kirby/src/Image/Darkroom.php | 7 +- kirby/src/Image/Darkroom/GdLib.php | 15 +- kirby/src/Image/Darkroom/ImageMagick.php | 17 +- kirby/src/Image/Dimensions.php | 42 +- kirby/src/Image/Exif.php | 39 +- kirby/src/Image/Image.php | 17 +- kirby/src/Image/Location.php | 6 +- kirby/src/Image/QrCode.php | 559 +- kirby/src/Option/Option.php | 47 +- kirby/src/Option/Options.php | 27 +- kirby/src/Option/OptionsApi.php | 4 +- kirby/src/Option/OptionsQuery.php | 6 +- kirby/src/Panel/Assets.php | 94 +- kirby/src/Panel/ChangesDialog.php | 105 +- kirby/src/Panel/Controller/PageTree.php | 113 + kirby/src/Panel/Controller/Search.php | 104 + kirby/src/Panel/Field.php | 100 +- kirby/src/Panel/File.php | 164 +- kirby/src/Panel/Home.php | 8 +- kirby/src/Panel/Json.php | 2 +- kirby/src/Panel/Lab/Category.php | 9 +- kirby/src/Panel/Lab/Doc.php | 194 + kirby/src/Panel/Lab/Doc/Argument.php | 46 + kirby/src/Panel/Lab/Doc/Event.php | 57 + kirby/src/Panel/Lab/Doc/Method.php | 60 + kirby/src/Panel/Lab/Doc/Prop.php | 113 + kirby/src/Panel/Lab/Doc/Slot.php | 57 + kirby/src/Panel/Lab/Docs.php | 311 +- kirby/src/Panel/Lab/Example.php | 15 +- kirby/src/Panel/Lab/Snippet.php | 7 +- kirby/src/Panel/Lab/Template.php | 7 +- kirby/src/Panel/Menu.php | 32 +- kirby/src/Panel/Model.php | 97 +- kirby/src/Panel/Page.php | 121 +- kirby/src/Panel/PageCreateDialog.php | 44 +- kirby/src/Panel/Panel.php | 120 +- kirby/src/Panel/Plugins.php | 2 +- kirby/src/Panel/Redirect.php | 2 +- kirby/src/Panel/Site.php | 58 +- kirby/src/Panel/Ui/Button.php | 64 + .../Panel/Ui/Buttons/LanguageCreateButton.php | 33 + .../Panel/Ui/Buttons/LanguageDeleteButton.php | 34 + .../Ui/Buttons/LanguageSettingsButton.php | 34 + .../Panel/Ui/Buttons/LanguagesDropdown.php | 120 + kirby/src/Panel/Ui/Buttons/OpenButton.php | 32 + .../src/Panel/Ui/Buttons/PageStatusButton.php | 50 + kirby/src/Panel/Ui/Buttons/PreviewButton.php | 30 + kirby/src/Panel/Ui/Buttons/SettingsButton.php | 32 + kirby/src/Panel/Ui/Buttons/VersionsButton.php | 57 + kirby/src/Panel/Ui/Buttons/ViewButton.php | 215 + kirby/src/Panel/Ui/Buttons/ViewButtons.php | 104 + kirby/src/Panel/Ui/Component.php | 90 + kirby/src/Panel/Ui/FilePreview.php | 105 + .../Ui/FilePreviews/AudioFilePreview.php | 29 + .../Ui/FilePreviews/DefaultFilePreview.php | 42 + .../Ui/FilePreviews/ImageFilePreview.php | 53 + .../Panel/Ui/FilePreviews/PdfFilePreview.php | 29 + .../Ui/FilePreviews/VideoFilePreview.php | 29 + kirby/src/Panel/User.php | 94 +- kirby/src/Panel/UserTotpDisableDialog.php | 16 +- kirby/src/Panel/View.php | 80 +- kirby/src/Parsley/Element.php | 8 +- kirby/src/Parsley/Inline.php | 8 +- kirby/src/Parsley/Parsley.php | 27 +- kirby/src/Parsley/Schema.php | 8 +- kirby/src/Parsley/Schema/Blocks.php | 11 +- kirby/src/Parsley/Schema/Plain.php | 5 +- .../{Cms/PluginAsset.php => Plugin/Asset.php} | 18 +- .../PluginAssets.php => Plugin/Assets.php} | 12 +- kirby/src/Plugin/License.php | 112 + kirby/src/Plugin/LicenseStatus.php | 135 + kirby/src/{Cms => Plugin}/Plugin.php | 53 +- kirby/src/Query/Argument.php | 2 +- kirby/src/Query/Arguments.php | 2 + kirby/src/Query/Expression.php | 14 +- kirby/src/Query/Query.php | 2 +- kirby/src/Query/Segment.php | 8 +- kirby/src/Query/Segments.php | 6 +- kirby/src/Sane/DomHandler.php | 40 +- kirby/src/Sane/Handler.php | 14 +- kirby/src/Sane/Html.php | 5 +- kirby/src/Sane/Sane.php | 19 +- kirby/src/Sane/Svg.php | 34 +- kirby/src/Sane/Svgz.php | 18 +- kirby/src/Sane/Xml.php | 16 +- kirby/src/Session/AutoSession.php | 23 +- kirby/src/Session/FileSessionStore.php | 172 +- kirby/src/Session/Session.php | 201 +- kirby/src/Session/SessionData.php | 26 +- kirby/src/Session/Sessions.php | 58 +- kirby/src/Template/Slot.php | 6 +- kirby/src/Template/Snippet.php | 19 +- kirby/src/Template/Template.php | 3 +- kirby/src/Text/KirbyTag.php | 12 +- kirby/src/Text/Markdown.php | 8 +- kirby/src/Text/SmartyPants.php | 2 +- kirby/src/Toolkit/A.php | 93 +- kirby/src/Toolkit/Collection.php | 586 +- kirby/src/Toolkit/Component.php | 107 +- kirby/src/Toolkit/Controller.php | 5 +- kirby/src/Toolkit/Date.php | 73 +- kirby/src/Toolkit/Dom.php | 153 +- kirby/src/Toolkit/Html.php | 75 +- kirby/src/Toolkit/I18n.php | 16 +- kirby/src/Toolkit/Iterator.php | 26 +- kirby/src/Toolkit/Locale.php | 20 +- kirby/src/Toolkit/Obj.php | 20 +- kirby/src/Toolkit/Pagination.php | 16 +- kirby/src/Toolkit/Properties.php | 152 - kirby/src/Toolkit/Silo.php | 2 +- kirby/src/Toolkit/Str.php | 105 +- kirby/src/Toolkit/SymmetricCrypto.php | 32 +- kirby/src/Toolkit/Totp.php | 4 +- kirby/src/Toolkit/Tpl.php | 3 +- kirby/src/Toolkit/V.php | 94 +- kirby/src/Toolkit/View.php | 9 +- kirby/src/Toolkit/Xml.php | 146 +- kirby/src/Uuid/BlockUuid.php | 2 +- kirby/src/Uuid/FieldUuid.php | 4 +- kirby/src/Uuid/ModelUuid.php | 15 +- kirby/src/Uuid/StructureUuid.php | 2 +- kirby/src/Uuid/Uuid.php | 42 +- kirby/src/Uuid/Uuids.php | 8 +- kirby/vendor/composer/autoload_classmap.php | 83 +- kirby/vendor/composer/autoload_static.php | 83 +- kirby/vendor/composer/installed.json | 36 +- kirby/vendor/composer/installed.php | 20 +- kirby/vendor/filp/whoops/composer.json | 1 + .../whoops/src/Whoops/Resources/css/prism.css | 2 +- .../src/Whoops/Resources/js/clipboard.min.js | 6 +- .../whoops/src/Whoops/Resources/js/prism.js | 4 +- .../src/Whoops/Resources/js/whoops.base.js | 9 +- .../src/Whoops/Resources/js/zepto.min.js | 4 +- kirby/vendor/filp/whoops/src/Whoops/Run.php | 12 +- .../symfony/yaml/Command/LintCommand.php | 25 +- kirby/vendor/symfony/yaml/Dumper.php | 72 +- kirby/vendor/symfony/yaml/Escaper.php | 40 +- .../symfony/yaml/Exception/ParseException.php | 39 +- kirby/vendor/symfony/yaml/Inline.php | 97 +- kirby/vendor/symfony/yaml/Parser.php | 69 +- kirby/vendor/symfony/yaml/Tag/TaggedValue.php | 11 +- kirby/vendor/symfony/yaml/Unescaper.php | 2 +- kirby/vendor/symfony/yaml/Yaml.php | 19 +- kirby/vendor/symfony/yaml/composer.json | 8 +- kirby/views/panel.php | 26 +- 472 files changed, 30853 insertions(+), 10301 deletions(-) create mode 100644 kirby/config/api/routes/changes.php delete mode 100644 kirby/config/api/routes/lock.php create mode 100644 kirby/config/areas/account/buttons.php create mode 100644 kirby/config/areas/files/buttons.php create mode 100644 kirby/config/areas/languages/buttons.php create mode 100644 kirby/config/areas/site/buttons.php create mode 100644 kirby/config/areas/users/buttons.php create mode 100644 kirby/config/sections/mixins/batch.php create mode 100644 kirby/i18n/translations/bs.json create mode 100644 kirby/i18n/translations/sr@latin.json create mode 100644 kirby/i18n/translations/zh_TW.json delete mode 100644 kirby/panel/dist/js/container-query-polyfill.modern.min.js create mode 100644 kirby/panel/dist/js/sortable.esm.min.js create mode 100644 kirby/panel/dist/js/vue.esm.browser.js create mode 100644 kirby/panel/dist/js/vue.esm.browser.min.js delete mode 100644 kirby/panel/dist/js/vue.min.js create mode 100644 kirby/panel/dist/js/vue.runtime.esm.min.js delete mode 100644 kirby/panel/dist/js/vue.runtime.min.js delete mode 100644 kirby/panel/dist/js/vuedraggable.min.js create mode 100644 kirby/src/Api/Controller/Changes.php create mode 100644 kirby/src/Api/Upload.php delete mode 100644 kirby/src/Blueprint/Collection.php delete mode 100644 kirby/src/Blueprint/Config.php delete mode 100644 kirby/src/Blueprint/Extension.php delete mode 100644 kirby/src/Blueprint/Factory.php delete mode 100644 kirby/src/Blueprint/Node.php delete mode 100644 kirby/src/Blueprint/NodeI18n.php delete mode 100644 kirby/src/Blueprint/NodeIcon.php delete mode 100644 kirby/src/Blueprint/NodeProperty.php delete mode 100644 kirby/src/Blueprint/NodeString.php delete mode 100644 kirby/src/Blueprint/NodeText.php create mode 100644 kirby/src/Cache/RedisCache.php delete mode 100644 kirby/src/Cms/ContentLock.php delete mode 100644 kirby/src/Cms/ContentLocks.php create mode 100644 kirby/src/Cms/Events.php create mode 100644 kirby/src/Cms/HasModels.php create mode 100644 kirby/src/Cms/LanguagePermissions.php delete mode 100644 kirby/src/Cms/Model.php create mode 100644 kirby/src/Cms/ModelCommit.php create mode 100644 kirby/src/Cms/ModelState.php create mode 100644 kirby/src/Cms/PageCopy.php create mode 100644 kirby/src/Content/Changes.php delete mode 100644 kirby/src/Content/ContentStorage.php delete mode 100644 kirby/src/Content/ContentStorageHandler.php delete mode 100644 kirby/src/Content/ContentTranslation.php create mode 100644 kirby/src/Content/ImmutableMemoryStorage.php create mode 100644 kirby/src/Content/Lock.php create mode 100644 kirby/src/Content/LockedContentException.php create mode 100644 kirby/src/Content/MemoryStorage.php delete mode 100644 kirby/src/Content/PlainTextContentStorageHandler.php create mode 100644 kirby/src/Content/PlainTextStorage.php create mode 100644 kirby/src/Content/Storage.php create mode 100644 kirby/src/Content/Translation.php create mode 100644 kirby/src/Content/Translations.php create mode 100644 kirby/src/Content/Version.php create mode 100644 kirby/src/Content/VersionCache.php create mode 100644 kirby/src/Content/VersionId.php create mode 100644 kirby/src/Content/VersionRules.php create mode 100644 kirby/src/Content/Versions.php create mode 100644 kirby/src/Form/Field/EntriesField.php create mode 100644 kirby/src/Form/Mixin/Api.php create mode 100644 kirby/src/Form/Mixin/Model.php create mode 100644 kirby/src/Form/Mixin/Translatable.php create mode 100644 kirby/src/Form/Mixin/Validation.php create mode 100644 kirby/src/Form/Mixin/Value.php create mode 100644 kirby/src/Form/Mixin/When.php create mode 100644 kirby/src/Panel/Controller/PageTree.php create mode 100644 kirby/src/Panel/Controller/Search.php create mode 100644 kirby/src/Panel/Lab/Doc.php create mode 100644 kirby/src/Panel/Lab/Doc/Argument.php create mode 100644 kirby/src/Panel/Lab/Doc/Event.php create mode 100644 kirby/src/Panel/Lab/Doc/Method.php create mode 100644 kirby/src/Panel/Lab/Doc/Prop.php create mode 100644 kirby/src/Panel/Lab/Doc/Slot.php create mode 100644 kirby/src/Panel/Ui/Button.php create mode 100644 kirby/src/Panel/Ui/Buttons/LanguageCreateButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/LanguageDeleteButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/LanguageSettingsButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/LanguagesDropdown.php create mode 100644 kirby/src/Panel/Ui/Buttons/OpenButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/PageStatusButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/PreviewButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/SettingsButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/VersionsButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/ViewButton.php create mode 100644 kirby/src/Panel/Ui/Buttons/ViewButtons.php create mode 100644 kirby/src/Panel/Ui/Component.php create mode 100644 kirby/src/Panel/Ui/FilePreview.php create mode 100644 kirby/src/Panel/Ui/FilePreviews/AudioFilePreview.php create mode 100644 kirby/src/Panel/Ui/FilePreviews/DefaultFilePreview.php create mode 100644 kirby/src/Panel/Ui/FilePreviews/ImageFilePreview.php create mode 100644 kirby/src/Panel/Ui/FilePreviews/PdfFilePreview.php create mode 100644 kirby/src/Panel/Ui/FilePreviews/VideoFilePreview.php rename kirby/src/{Cms/PluginAsset.php => Plugin/Asset.php} (88%) rename kirby/src/{Cms/PluginAssets.php => Plugin/Assets.php} (94%) create mode 100644 kirby/src/Plugin/License.php create mode 100644 kirby/src/Plugin/LicenseStatus.php rename kirby/src/{Cms => Plugin}/Plugin.php (87%) delete mode 100644 kirby/src/Toolkit/Properties.php diff --git a/composer.json b/composer.json index acc5755..52b4997 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ ], "require": { "php": "~8.3.0", - "getkirby/cms": "^4.0", + "getkirby/cms": "^5.0", "kirbyzone/sitemapper": "^1.2.1", "wearejust/kirby-twig": "^5.0" }, diff --git a/composer.lock b/composer.lock index 71e5b53..1d0ebc2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d9d8444cbdb90e7d30acec264e245c6a", + "content-hash": "b8851efcf787532ad7f58ff49d1beaba", "packages": [ { "name": "christian-riesen/base32", @@ -201,16 +201,16 @@ }, { "name": "filp/whoops", - "version": "2.18.0", + "version": "2.18.3", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" + "reference": "59a123a3d459c5a23055802237cb317f609867e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", - "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", + "reference": "59a123a3d459c5a23055802237cb317f609867e5", "shasum": "" }, "require": { @@ -260,7 +260,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.0" + "source": "https://github.com/filp/whoops/tree/2.18.3" }, "funding": [ { @@ -268,20 +268,20 @@ "type": "github" } ], - "time": "2025-03-15T12:00:00+00:00" + "time": "2025-06-16T00:02:10+00:00" }, { "name": "getkirby/cms", - "version": "4.8.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/getkirby/kirby.git", - "reference": "5292c17832dd34b0e5f3e98dea837a357ef037b6" + "reference": "ddd11f9b4a23e0b5d306b146ca5d6b7a1c1909a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getkirby/kirby/zipball/5292c17832dd34b0e5f3e98dea837a357ef037b6", - "reference": "5292c17832dd34b0e5f3e98dea837a357ef037b6", + "url": "https://api.github.com/repos/getkirby/kirby/zipball/ddd11f9b4a23e0b5d306b146ca5d6b7a1c1909a9", + "reference": "ddd11f9b4a23e0b5d306b146ca5d6b7a1c1909a9", "shasum": "" }, "require": { @@ -299,15 +299,15 @@ "ext-mbstring": "*", "ext-openssl": "*", "ext-simplexml": "*", - "filp/whoops": "2.18.0", + "filp/whoops": "2.18.3", "getkirby/composer-installer": "^1.2.1", "laminas/laminas-escaper": "2.17.0", "michelf/php-smartypants": "1.8.1", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "phpmailer/phpmailer": "6.10.0", "symfony/polyfill-intl-idn": "1.32.0", "symfony/polyfill-mbstring": "1.32.0", - "symfony/yaml": "6.4.21" + "symfony/yaml": "7.3.1" }, "replace": { "symfony/polyfill-php72": "*" @@ -319,6 +319,7 @@ "ext-fileinfo": "Improved mime type detection for files", "ext-intl": "Improved i18n number formatting", "ext-memcached": "Support for the Memcached cache driver", + "ext-redis": "Support for the Redis cache driver", "ext-sodium": "Support for the crypto class and more robust session handling", "ext-zip": "Support for ZIP archive file functions", "ext-zlib": "Sanitization and validation for svgz files" @@ -371,7 +372,7 @@ "type": "custom" } ], - "time": "2025-06-03T09:52:03+00:00" + "time": "2025-07-03T11:23:56+00:00" }, { "name": "getkirby/composer-installer", @@ -1157,28 +1158,28 @@ }, { "name": "symfony/yaml", - "version": "v6.4.21", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e" + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f01987f45676778b474468aa266fe2eda1f2bc7e", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0c3555045a46ab3cd4cc5a69d161225195230edb", + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -1209,7 +1210,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.21" + "source": "https://github.com/symfony/yaml/tree/v7.3.1" }, "funding": [ { @@ -1225,7 +1226,7 @@ "type": "tidelift" } ], - "time": "2025-04-04T09:48:44+00:00" + "time": "2025-06-03T06:57:57+00:00" }, { "name": "twig/twig", diff --git a/kirby/.editorconfig b/kirby/.editorconfig index 10fd327..c487405 100644 --- a/kirby/.editorconfig +++ b/kirby/.editorconfig @@ -21,6 +21,10 @@ insert_final_newline = true indent_size = 2 insert_final_newline = false +[views/**/*.php] +indent_size = 2 +insert_final_newline = false + [*.yml] indent_style = space diff --git a/kirby/bootstrap.php b/kirby/bootstrap.php index 9500125..70f27ce 100644 --- a/kirby/bootstrap.php +++ b/kirby/bootstrap.php @@ -5,7 +5,7 @@ * stop at older or too recent versions */ if ( - version_compare(PHP_VERSION, '8.1.0', '>=') === false || + version_compare(PHP_VERSION, '8.2.0', '>=') === false || version_compare(PHP_VERSION, '8.5.0', '<') === false ) { die(include __DIR__ . '/views/php.php'); @@ -27,10 +27,9 @@ if (is_file($autoloader = dirname(__DIR__) . '/vendor/autoload.php')) { * @psalm-suppress MissingFile */ include $autoloader; -} else { - /** - * If neither one exists, don't bother searching; - * it's a custom directory setup and the users need to - * load the autoloader themselves - */ } +/** + * If neither one exists, don't bother searching; + * it's a custom directory setup and the users need to + * load the autoloader themselves + */ diff --git a/kirby/composer.json b/kirby/composer.json index 062ec11..74d526a 100644 --- a/kirby/composer.json +++ b/kirby/composer.json @@ -3,7 +3,7 @@ "description": "The Kirby core", "license": "proprietary", "type": "kirby-cms", - "version": "4.8.0", + "version": "5.0.1", "keywords": [ "kirby", "cms", @@ -24,7 +24,7 @@ "source": "https://github.com/getkirby/kirby" }, "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "ext-SimpleXML": "*", "ext-ctype": "*", "ext-curl": "*", @@ -39,14 +39,14 @@ "christian-riesen/base32": "1.6.0", "claviska/simpleimage": "4.2.1", "composer/semver": "3.4.3", - "filp/whoops": "2.18.0", + "filp/whoops": "2.18.3", "getkirby/composer-installer": "^1.2.1", "laminas/laminas-escaper": "2.17.0", "michelf/php-smartypants": "1.8.1", "phpmailer/phpmailer": "6.10.0", "symfony/polyfill-intl-idn": "1.32.0", "symfony/polyfill-mbstring": "1.32.0", - "symfony/yaml": "6.4.21" + "symfony/yaml": "7.3.1" }, "replace": { "symfony/polyfill-php72": "*" @@ -58,6 +58,7 @@ "ext-fileinfo": "Improved mime type detection for files", "ext-intl": "Improved i18n number formatting", "ext-memcached": "Support for the Memcached cache driver", + "ext-redis": "Support for the Redis cache driver", "ext-sodium": "Support for the crypto class and more robust session handling", "ext-zip": "Support for ZIP archive file functions", "ext-zlib": "Sanitization and validation for svgz files" @@ -80,7 +81,7 @@ }, "optimize-autoloader": true, "platform": { - "php": "8.1.0" + "php": "8.2.0" }, "platform-check": false }, diff --git a/kirby/composer.lock b/kirby/composer.lock index 2dd57dc..99a5f78 100644 --- a/kirby/composer.lock +++ b/kirby/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e70567909c74a3864f445abea10a85cc", + "content-hash": "085c69c5d57912362ce380d23eaa8fbc", "packages": [ { "name": "christian-riesen/base32", @@ -201,16 +201,16 @@ }, { "name": "filp/whoops", - "version": "2.18.0", + "version": "2.18.3", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" + "reference": "59a123a3d459c5a23055802237cb317f609867e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", - "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", + "reference": "59a123a3d459c5a23055802237cb317f609867e5", "shasum": "" }, "require": { @@ -260,7 +260,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.0" + "source": "https://github.com/filp/whoops/tree/2.18.3" }, "funding": [ { @@ -268,7 +268,7 @@ "type": "github" } ], - "time": "2025-03-15T12:00:00+00:00" + "time": "2025-06-16T00:02:10+00:00" }, { "name": "getkirby/composer-installer", @@ -1017,28 +1017,28 @@ }, { "name": "symfony/yaml", - "version": "v6.4.21", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e" + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f01987f45676778b474468aa266fe2eda1f2bc7e", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0c3555045a46ab3cd4cc5a69d161225195230edb", + "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -1069,7 +1069,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.21" + "source": "https://github.com/symfony/yaml/tree/v7.3.1" }, "funding": [ { @@ -1085,7 +1085,7 @@ "type": "tidelift" } ], - "time": "2025-04-04T09:48:44+00:00" + "time": "2025-06-03T06:57:57+00:00" } ], "packages-dev": [], @@ -1095,7 +1095,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "ext-simplexml": "*", "ext-ctype": "*", "ext-curl": "*", @@ -1110,7 +1110,7 @@ }, "platform-dev": {}, "platform-overrides": { - "php": "8.1.0" + "php": "8.2.0" }, "plugin-api-version": "2.6.0" } diff --git a/kirby/config/aliases.php b/kirby/config/aliases.php index 206d3b4..fe5537b 100644 --- a/kirby/config/aliases.php +++ b/kirby/config/aliases.php @@ -75,7 +75,6 @@ return [ // Any of these might be removed at any point in the future 'kirby\cms\asset' => 'Kirby\Filesystem\Asset', 'kirby\cms\content' => 'Kirby\Content\Content', - 'kirby\cms\contenttranslation' => 'Kirby\Content\ContentTranslation', 'kirby\cms\dir' => 'Kirby\Filesystem\Dir', 'kirby\cms\filename' => 'Kirby\Filesystem\Filename', 'kirby\cms\filefoundation' => 'Kirby\Filesystem\IsFile', @@ -83,6 +82,9 @@ return [ 'kirby\cms\form' => 'Kirby\Form\Form', 'kirby\cms\kirbytag' => 'Kirby\Text\KirbyTag', 'kirby\cms\kirbytags' => 'Kirby\Text\KirbyTags', + 'kirby\cms\plugin' => 'Kirby\Plugin\Plugin', + 'kirby\cms\pluginasset' => 'Kirby\Plugin\Asset', + 'kirby\cms\pluginassets' => 'Kirby\Plugin\Assets', 'kirby\cms\template' => 'Kirby\Template\Template', 'kirby\form\options' => 'Kirby\Option\Options', 'kirby\form\optionsapi' => 'Kirby\Option\OptionsApi', diff --git a/kirby/config/api/authentication.php b/kirby/config/api/authentication.php index 15f3bbd..0cee131 100644 --- a/kirby/config/api/authentication.php +++ b/kirby/config/api/authentication.php @@ -11,17 +11,17 @@ return function () { $auth->type($allowImpersonation) === 'session' && $auth->csrf() === false ) { - throw new AuthException('Unauthenticated'); + throw new AuthException(message: 'Unauthenticated'); } // get user from session or basic auth if ($user = $auth->user(null, $allowImpersonation)) { if ($user->role()->permissions()->for('access', 'panel') === false) { - throw new AuthException(['key' => 'access.panel']); + throw new AuthException(key: 'access.panel'); } return $user; } - throw new AuthException('Unauthenticated'); + throw new AuthException(message: 'Unauthenticated'); }; diff --git a/kirby/config/api/routes.php b/kirby/config/api/routes.php index aca9e79..62ce665 100644 --- a/kirby/config/api/routes.php +++ b/kirby/config/api/routes.php @@ -4,25 +4,25 @@ * Api Routes Definitions */ return function ($kirby) { - $routes = array_merge( - include __DIR__ . '/routes/auth.php', - include __DIR__ . '/routes/pages.php', - include __DIR__ . '/routes/roles.php', - include __DIR__ . '/routes/site.php', - include __DIR__ . '/routes/users.php', - include __DIR__ . '/routes/files.php', - include __DIR__ . '/routes/lock.php', - include __DIR__ . '/routes/system.php', - include __DIR__ . '/routes/translations.php' - ); + $routes = [ + ...include __DIR__ . '/routes/auth.php', + ...include __DIR__ . '/routes/changes.php', + ...include __DIR__ . '/routes/pages.php', + ...include __DIR__ . '/routes/roles.php', + ...include __DIR__ . '/routes/site.php', + ...include __DIR__ . '/routes/users.php', + ...include __DIR__ . '/routes/files.php', + ...include __DIR__ . '/routes/system.php', + ...include __DIR__ . '/routes/translations.php' + ]; // only add the language routes if the // multi language setup is activated if ($kirby->option('languages', false) !== false) { - $routes = array_merge( - $routes, - include __DIR__ . '/routes/languages.php' - ); + $routes = [ + ...$routes, + ...include __DIR__ . '/routes/languages.php' + ]; } return $routes; diff --git a/kirby/config/api/routes/auth.php b/kirby/config/api/routes/auth.php index 97b81a1..ef79996 100644 --- a/kirby/config/api/routes/auth.php +++ b/kirby/config/api/routes/auth.php @@ -15,7 +15,9 @@ return [ return $this->resolve($user)->view('auth'); } - throw new NotFoundException('The user cannot be found'); + throw new NotFoundException( + message: 'The user cannot be found' + ); } ], [ @@ -27,7 +29,9 @@ return [ // csrf token check if ($auth->type() === 'session' && $auth->csrf() === false) { - throw new InvalidArgumentException('Invalid CSRF token'); + throw new InvalidArgumentException( + message: 'Invalid CSRF token' + ); } $user = $auth->verifyChallenge($this->requestBody('code')); @@ -49,7 +53,9 @@ return [ // csrf token check if ($auth->type() === 'session' && $auth->csrf() === false) { - throw new InvalidArgumentException('Invalid CSRF token'); + throw new InvalidArgumentException( + message: 'Invalid CSRF token' + ); } $email = $this->requestBody('email'); @@ -58,7 +64,9 @@ return [ if ($password) { if (isset($methods['password']) !== true) { - throw new InvalidArgumentException('Login with password is not enabled'); + throw new InvalidArgumentException( + message: 'Login with password is not enabled' + ); } if ( @@ -73,7 +81,9 @@ return [ $mode = match (true) { isset($methods['code']) => 'login', isset($methods['password-reset']) => 'password-reset', - default => throw new InvalidArgumentException('Login without password is not enabled') + default => throw new InvalidArgumentException( + message: 'Login without password is not enabled' + ) }; $status = $auth->createChallenge($email, $long, $mode); diff --git a/kirby/config/api/routes/changes.php b/kirby/config/api/routes/changes.php new file mode 100644 index 0000000..2e35754 --- /dev/null +++ b/kirby/config/api/routes/changes.php @@ -0,0 +1,37 @@ + '(:all)/changes/discard', + 'method' => 'POST', + 'action' => function (string $path) { + return Changes::discard( + model: Find::parent($path), + ); + } + ], + [ + 'pattern' => '(:all)/changes/publish', + 'method' => 'POST', + 'action' => function (string $path) { + return Changes::publish( + model: Find::parent($path), + input: App::instance()->request()->get() + ); + } + ], + [ + 'pattern' => '(:all)/changes/save', + 'method' => 'POST', + 'action' => function (string $path) { + return Changes::save( + model: Find::parent($path), + input: App::instance()->request()->get() + ); + } + ], +]; diff --git a/kirby/config/api/routes/files.php b/kirby/config/api/routes/files.php index 23e1729..3b61a2c 100644 --- a/kirby/config/api/routes/files.php +++ b/kirby/config/api/routes/files.php @@ -47,7 +47,7 @@ return [ // move_uploaded_file() not working with unit test // @codeCoverageIgnoreStart return $this->upload(function ($source, $filename) use ($path) { - // move the source file from the temp dir + // move the source file to the content folder return $this->parent($path)->createFile([ 'content' => [ 'sort' => $this->requestBody('sort') diff --git a/kirby/config/api/routes/lock.php b/kirby/config/api/routes/lock.php deleted file mode 100644 index c7095d9..0000000 --- a/kirby/config/api/routes/lock.php +++ /dev/null @@ -1,56 +0,0 @@ - '(:all)/lock', - 'method' => 'GET', - 'action' => function (string $path) { - return [ - 'lock' => $this->parent($path)->lock()?->toArray() ?? false - ]; - } - ], - [ - 'pattern' => '(:all)/lock', - 'method' => 'PATCH', - 'action' => function (string $path) { - return $this->parent($path)->lock()?->create(); - } - ], - [ - 'pattern' => '(:all)/lock', - 'method' => 'DELETE', - 'action' => function (string $path) { - try { - return $this->parent($path)->lock()?->remove(); - } catch (NotFoundException) { - return true; - } - } - ], - [ - 'pattern' => '(:all)/unlock', - 'method' => 'PATCH', - 'action' => function (string $path) { - return $this->parent($path)->lock()?->unlock(); - } - ], - [ - 'pattern' => '(:all)/unlock', - 'method' => 'DELETE', - 'action' => function (string $path) { - try { - return $this->parent($path)->lock()?->resolve(); - } catch (NotFoundException) { - return true; - } - } - ], -]; diff --git a/kirby/config/api/routes/system.php b/kirby/config/api/routes/system.php index e7e49b4..c810750 100644 --- a/kirby/config/api/routes/system.php +++ b/kirby/config/api/routes/system.php @@ -31,18 +31,6 @@ return [ ]; } ], - [ - 'pattern' => 'system/method-test', - 'method' => 'PATCH', - 'action' => function () { - return [ - 'status' => match ($this->kirby()->request()->method()) { - 'PATCH' => 'ok', - default => 'fail' - } - ]; - } - ], [ 'pattern' => 'system/register', 'method' => 'POST', @@ -60,19 +48,27 @@ return [ // csrf token check if ($auth->type() === 'session' && $auth->csrf() === false) { - throw new InvalidArgumentException('Invalid CSRF token'); + throw new InvalidArgumentException( + message: 'Invalid CSRF token' + ); } if ($system->isOk() === false) { - throw new Exception('The server is not setup correctly'); + throw new Exception( + message: 'The server is not setup correctly' + ); } if ($system->isInstallable() === false) { - throw new Exception('The Panel cannot be installed'); + throw new Exception( + message: 'The Panel cannot be installed' + ); } if ($system->isInstalled() === true) { - throw new Exception('The Panel is already installed'); + throw new Exception( + message: 'The Panel is already installed' + ); } // create the first user diff --git a/kirby/config/api/routes/users.php b/kirby/config/api/routes/users.php index 203e2d2..e55a009 100644 --- a/kirby/config/api/routes/users.php +++ b/kirby/config/api/routes/users.php @@ -86,18 +86,18 @@ return [ function ($source, $filename) use ($id) { $type = F::type($filename); if ($type !== 'image') { - throw new Exception([ - 'key' => 'file.type.invalid', - 'data' => compact('type') - ]); + throw new Exception( + key: 'file.type.invalid', + data: compact('type') + ); } $mime = F::mime($source); if (Str::startsWith($mime, 'image/') !== true) { - throw new Exception([ - 'key' => 'file.mime.invalid', - 'data' => compact('mime') - ]); + throw new Exception( + key: 'file.mime.invalid', + data: compact('mime') + ); } // delete the old avatar @@ -184,7 +184,23 @@ return [ ], 'method' => 'PATCH', 'action' => function (string $id) { - return $this->user($id)->changePassword($this->requestBody('password')); + $user = $this->user($id); + + // validate password of acting user unless they have logged in to reset it; + // always validate password of acting user when changing password of other users + if ($this->session()->get('kirby.resetPassword') !== true || $this->user()->is($user) !== true) { + $this->user()->validatePassword($this->requestBody('currentPassword')); + } + + $result = $user->changePassword($this->requestBody('password')); + + // if we changed the password of the current user… + if ($user->isLoggedIn() === true) { + // …don't allow additional resets (now the password is known again) + $this->session()->remove('kirby.resetPassword'); + } + + return $result; } ], [ diff --git a/kirby/config/areas/account.php b/kirby/config/areas/account.php index e138cab..9f9fe73 100644 --- a/kirby/config/areas/account.php +++ b/kirby/config/areas/account.php @@ -7,6 +7,7 @@ return function () { 'icon' => 'account', 'label' => I18n::translate('view.account'), 'search' => 'users', + 'buttons' => require __DIR__ . '/account/buttons.php', 'dialogs' => require __DIR__ . '/account/dialogs.php', 'drawers' => require __DIR__ . '/account/drawers.php', 'dropdowns' => require __DIR__ . '/account/dropdowns.php', diff --git a/kirby/config/areas/account/buttons.php b/kirby/config/areas/account/buttons.php new file mode 100644 index 0000000..263ef36 --- /dev/null +++ b/kirby/config/areas/account/buttons.php @@ -0,0 +1,13 @@ + function (App $kirby, User $user) { + if ($kirby->user()->is($user) === true) { + return new ViewButton(component: 'k-theme-view-button'); + } + } +]; diff --git a/kirby/config/areas/account/dialogs.php b/kirby/config/areas/account/dialogs.php index 93635ce..eef1440 100644 --- a/kirby/config/areas/account/dialogs.php +++ b/kirby/config/areas/account/dialogs.php @@ -5,7 +5,6 @@ use Kirby\Panel\UserTotpEnableDialog; $dialogs = require __DIR__ . '/../users/dialogs.php'; return [ - // change email 'account.changeEmail' => [ 'pattern' => '(account)/changeEmail', diff --git a/kirby/config/areas/account/dropdowns.php b/kirby/config/areas/account/dropdowns.php index d739971..6d115d5 100644 --- a/kirby/config/areas/account/dropdowns.php +++ b/kirby/config/areas/account/dropdowns.php @@ -7,8 +7,16 @@ return [ 'pattern' => '(account)', 'options' => $dropdowns['user']['options'] ], + 'account.languages' => [ + 'pattern' => '(account)/languages', + 'options' => $dropdowns['user.languages']['options'] + ], 'account.file' => [ 'pattern' => '(account)/files/(:any)', 'options' => $dropdowns['user.file']['options'] ], + 'account.file.languages' => [ + 'pattern' => '(account)/files/(:any)/languages', + 'options' => $files['language'] + ] ]; diff --git a/kirby/config/areas/account/views.php b/kirby/config/areas/account/views.php index 933e0a4..33625a5 100644 --- a/kirby/config/areas/account/views.php +++ b/kirby/config/areas/account/views.php @@ -26,6 +26,9 @@ return [ [ 'label' => I18n::translate('view.resetPassword') ] + ], + 'props' => [ + 'requirePassword' => App::instance()->session()->get('kirby.resetPassword') !== true ] ] ] diff --git a/kirby/config/areas/files/buttons.php b/kirby/config/areas/files/buttons.php new file mode 100644 index 0000000..b2d5028 --- /dev/null +++ b/kirby/config/areas/files/buttons.php @@ -0,0 +1,14 @@ + function (File $file) { + return new OpenButton(link: $file->previewUrl()); + }, + 'file.settings' => function (File $file) { + return new SettingsButton(model: $file); + } +]; diff --git a/kirby/config/areas/files/dialogs.php b/kirby/config/areas/files/dialogs.php index 8707bd0..400d949 100644 --- a/kirby/config/areas/files/dialogs.php +++ b/kirby/config/areas/files/dialogs.php @@ -45,13 +45,7 @@ return [ $oldUrl = $file->panel()->url(true); $newUrl = $renamed->panel()->url(true); $response = [ - 'event' => 'file.changeName', - 'dispatch' => [ - 'content/move' => [ - $oldUrl, - $newUrl - ] - ], + 'event' => 'file.changeName' ]; // check for a necessary redirect after the filename has changed @@ -163,7 +157,6 @@ return [ return [ 'event' => 'file.delete', - 'dispatch' => ['content/remove' => [$url]], 'redirect' => $redirect ]; } diff --git a/kirby/config/areas/files/dropdowns.php b/kirby/config/areas/files/dropdowns.php index 8687a54..1b7e653 100644 --- a/kirby/config/areas/files/dropdowns.php +++ b/kirby/config/areas/files/dropdowns.php @@ -1,9 +1,14 @@ function (string $parent, string $filename) { return Find::file($parent, $filename)->panel()->dropdown(); + }, + 'language' => function (string $parent, string $filename) { + $file = Find::file($parent, $filename); + return (new LanguagesDropdown($file))->options(); } ]; diff --git a/kirby/config/areas/lab/drawers.php b/kirby/config/areas/lab/drawers.php index 9d16d81..d1e515b 100644 --- a/kirby/config/areas/lab/drawers.php +++ b/kirby/config/areas/lab/drawers.php @@ -1,12 +1,13 @@ [ 'pattern' => 'lab/docs/(:any)', 'load' => function (string $component) { - if (Docs::installed() === false) { + if (Docs::isInstalled() === false) { return [ 'component' => 'k-text-drawer', 'props' => [ @@ -15,14 +16,12 @@ return [ ]; } - $docs = new Docs($component); - return [ 'component' => 'k-lab-docs-drawer', 'props' => [ 'icon' => 'book', 'title' => $component, - 'docs' => $docs->toArray() + 'docs' => Doc::factory($component)->toArray() ] ]; }, diff --git a/kirby/config/areas/lab/views.php b/kirby/config/areas/lab/views.php index 1f6e879..4a1907a 100644 --- a/kirby/config/areas/lab/views.php +++ b/kirby/config/areas/lab/views.php @@ -2,6 +2,7 @@ use Kirby\Cms\App; use Kirby\Panel\Lab\Category; +use Kirby\Panel\Lab\Doc; use Kirby\Panel\Lab\Docs; return [ @@ -12,7 +13,7 @@ return [ 'component' => 'k-lab-index-view', 'props' => [ 'categories' => Category::all(), - 'info' => Category::installed() ? null : 'The default Lab examples are not installed.', + 'info' => Category::isInstalled() ? null : 'The default Lab examples are not installed.', 'tab' => 'examples', ], ]; @@ -21,18 +22,7 @@ return [ 'lab.docs' => [ 'pattern' => 'lab/docs', 'action' => function () { - $props = match (Docs::installed()) { - true => [ - 'categories' => [['examples' => Docs::all()]], - 'tab' => 'docs', - ], - false => [ - 'info' => 'The UI docs are not installed.', - 'tab' => 'docs', - ] - }; - - return [ + $view = [ 'component' => 'k-lab-index-view', 'title' => 'Docs', 'breadcrumb' => [ @@ -40,8 +30,28 @@ return [ 'label' => 'Docs', 'link' => 'lab/docs' ] + ] + ]; + + // if docs are not installed, show info message + if (Docs::isInstalled() === false) { + return [ + ...$view, + 'props' => [ + 'info' => 'The UI docs are not installed.', + 'tab' => 'docs', + ], + ]; + } + + return [ + ...$view, + 'props' => [ + 'categories' => [ + ['examples' => Docs::all()] + ], + 'tab' => 'docs', ], - 'props' => $props, ]; } ], @@ -59,7 +69,7 @@ return [ ] ]; - if (Docs::installed() === false) { + if (Docs::isInstalled() === false) { return [ 'component' => 'k-lab-index-view', 'title' => $component, @@ -71,16 +81,50 @@ return [ ]; } - $docs = new Docs($component); + $doc = Doc::factory($component); + + if ($doc === null) { + return [ + 'component' => 'k-lab-index-view', + 'title' => $component, + 'breadcrumb' => $crumbs, + 'props' => [ + 'info' => 'No UI docs found for ' . $component . '.', + 'tab' => 'docs', + ], + ]; + } + + // header buttons + $buttons = []; + + if ($lab = $doc->lab()) { + $buttons[] = [ + 'props' => [ + 'text' => 'Lab examples', + 'icon' => 'lab', + 'link' => '/lab/' . $lab + ] + ]; + } + + $buttons[] = [ + 'props' => [ + 'icon' => 'github', + 'link' => $doc->source(), + 'target' => '_blank' + ] + ]; return [ 'component' => 'k-lab-docs-view', 'title' => $component, 'breadcrumb' => $crumbs, 'props' => [ + 'buttons' => $buttons, 'component' => $component, - 'docs' => $docs->toArray(), - 'lab' => $docs->lab() + 'docs' => $doc->toArray(), + 'lab' => $lab ] ]; } @@ -111,16 +155,39 @@ return [ $vue = $example->vue(); $compiler = App::instance()->option('panel.vue.compiler', true); - if (Docs::installed() === true && $docs = $props['docs'] ?? null) { - $docs = new Docs($docs); + if ($doc = $props['docs'] ?? null) { + $doc = Doc::factory($doc); } - $github = $docs?->github(); + $github = $doc?->source(); if ($source = $props['source'] ?? null) { $github ??= 'https://github.com/getkirby/kirby/tree/main/' . $source; } + // header buttons + $buttons = []; + + if ($doc) { + $buttons[] = [ + 'props' => [ + 'text' => $doc->name, + 'icon' => 'book', + 'drawer' => 'lab/docs/' . $doc->name + ] + ]; + } + + if ($github) { + $buttons[] = [ + 'props' => [ + 'icon' => 'github', + 'link' => $github, + 'target' => '_blank' + ] + ]; + } + return [ 'component' => 'k-lab-playground-view', 'breadcrumb' => [ @@ -133,8 +200,9 @@ return [ ] ], 'props' => [ + 'buttons' => $buttons, 'compiler' => $compiler, - 'docs' => $docs?->name(), + 'docs' => $doc?->name, 'examples' => $vue['examples'], 'file' => $example->module(), 'github' => $github, diff --git a/kirby/config/areas/languages.php b/kirby/config/areas/languages.php index 263ffd7..00a98c2 100644 --- a/kirby/config/areas/languages.php +++ b/kirby/config/areas/languages.php @@ -7,6 +7,7 @@ return function ($kirby) { 'icon' => 'translate', 'label' => I18n::translate('view.languages'), 'menu' => true, + 'buttons' => require __DIR__ . '/languages/buttons.php', 'dialogs' => require __DIR__ . '/languages/dialogs.php', 'views' => require __DIR__ . '/languages/views.php' ]; diff --git a/kirby/config/areas/languages/buttons.php b/kirby/config/areas/languages/buttons.php new file mode 100644 index 0000000..d0227e4 --- /dev/null +++ b/kirby/config/areas/languages/buttons.php @@ -0,0 +1,21 @@ + fn () => + new LanguageCreateButton(), + 'language.open' => fn (Language $language) => + new OpenButton(link: $language->url()), + 'language.settings' => fn (Language $language) => + new LanguageSettingsButton($language), + 'language.delete' => function (Language $language) { + if ($language->isDeletable() === true) { + return new LanguageDeleteButton($language); + } + } +]; diff --git a/kirby/config/areas/languages/dialogs.php b/kirby/config/areas/languages/dialogs.php index 8923f1f..5eb3aff 100644 --- a/kirby/config/areas/languages/dialogs.php +++ b/kirby/config/areas/languages/dialogs.php @@ -2,6 +2,7 @@ use Kirby\Cms\App; use Kirby\Cms\Find; +use Kirby\Cms\Language; use Kirby\Cms\LanguageVariable; use Kirby\Exception\NotFoundException; use Kirby\Toolkit\A; @@ -49,16 +50,34 @@ $translationDialogFields = [ 'label' => I18n::translate('language.variable.key'), 'type' => 'text' ], + 'multiple' => [ + 'label' => I18n::translate('language.variable.multiple'), + 'text' => I18n::translate('language.variable.multiple.text'), + 'help' => I18n::translate('language.variable.multiple.help'), + 'type' => 'toggle' + ], 'value' => [ 'buttons' => false, 'counter' => false, 'label' => I18n::translate('language.variable.value'), - 'type' => 'textarea' + 'type' => 'textarea', + 'when' => [ + 'multiple' => false + ] + ], + 'entries' => [ + 'field' => ['type' => 'text'], + 'label' => I18n::translate('language.variable.entries'), + 'help' => I18n::translate('language.variable.entries.help'), + 'type' => 'entries', + 'min' => 1, + 'when' => [ + 'multiple' => true + ], ] ]; return [ - // create language 'language.create' => [ 'pattern' => 'languages/create', @@ -184,6 +203,9 @@ return [ 'props' => [ 'fields' => $translationDialogFields, 'size' => 'large', + 'value' => [ + 'multiple' => false, + ] ], ]; }, @@ -191,8 +213,13 @@ return [ $request = App::instance()->request(); $language = Find::language($languageCode); - $key = $request->get('key', ''); - $value = $request->get('value', ''); + $key = $request->get('key', ''); + $multiple = $request->get('multiple', false); + + $value = match ($multiple) { + true => $request->get('entries', []), + default => $request->get('value', '') + }; LanguageVariable::create($key, $value); @@ -209,9 +236,9 @@ return [ $variable = Find::language($languageCode)->variable($translationKey, true); if ($variable->exists() === false) { - throw new NotFoundException([ - 'key' => 'language.variable.notFound' - ]); + throw new NotFoundException( + key: 'language.variable.notFound' + ); } return [ @@ -230,48 +257,65 @@ return [ 'language.translation.update' => [ 'pattern' => 'languages/(:any)/translations/(:any)/update', 'load' => function (string $languageCode, string $translationKey) use ($translationDialogFields) { - $variable = Find::language($languageCode)->variable($translationKey, true); + $language = Find::language($languageCode); + $variable = $language->variable($translationKey, true); if ($variable->exists() === false) { - throw new NotFoundException([ - 'key' => 'language.variable.notFound' - ]); + throw new NotFoundException( + key: 'language.variable.notFound' + ); } $fields = $translationDialogFields; - $fields['key']['disabled'] = true; - $fields['value']['autofocus'] = true; - // shows info text when variable is an array - // TODO: 5.0: use entries field instead showing info text - $isVariableArray = is_array($variable->value()) === true; + // the key field cannot be changed + // the multiple field is hidden + $fields['key']['disabled'] = true; + $fields['multiple']['type'] = 'hidden'; + // check if the variable has multiple values; + // ensure to use the default language for this check because + // the variable might not exist in the current language but + // already be defined in the default language with multiple values + $isVariableArray = Language::ensure('default')->variable($translationKey, true)->hasMultipleValues(); + + // set the correct value field + // when value is string, set value for value field + // when value is array, set value for entries field if ($isVariableArray === true) { - $fields['value'] = [ - 'label' => I18n::translate('info'), - 'type' => 'info', - 'text' => 'You are using an array variable for this key. Please modify it in the language file in /site/languages', + $fields['entries']['autofocus'] = true; + $value = [ + 'entries' => $variable->value(), + 'key' => $variable->key(), + 'multiple' => true + ]; + } else { + $fields['value']['autofocus'] = true; + $value = [ + 'key' => $variable->key(), + 'multiple' => false, + 'value' => $variable->value() ]; } return [ 'component' => 'k-form-dialog', 'props' => [ - 'cancelButton' => $isVariableArray === false, - 'fields' => $fields, - 'size' => 'large', - 'submitButton' => $isVariableArray === false, - 'value' => [ - 'key' => $variable->key(), - 'value' => $variable->value() - ] - ], + 'fields' => $fields, + 'size' => 'large', + 'value' => $value + ] ]; }, 'submit' => function (string $languageCode, string $translationKey) { - Find::language($languageCode)->variable($translationKey, true)->update( - App::instance()->request()->get('value', '') - ); + $request = App::instance()->request(); + $multiple = $request->get('multiple', false); + $value = match ($multiple) { + true => $request->get('entries', []), + default => $request->get('value', '') + }; + + Find::language($languageCode)->variable($translationKey, true)->update($value); return true; } diff --git a/kirby/config/areas/languages/views.php b/kirby/config/areas/languages/views.php index ac2d6d4..955ca5b 100644 --- a/kirby/config/areas/languages/views.php +++ b/kirby/config/areas/languages/views.php @@ -2,6 +2,7 @@ use Kirby\Cms\App; use Kirby\Cms\Find; +use Kirby\Panel\Ui\Buttons\ViewButtons; use Kirby\Toolkit\Escape; use Kirby\Toolkit\I18n; @@ -19,9 +20,9 @@ return [ $foundation = $kirby->defaultLanguage()->translations(); $translations = $language->translations(); - // TODO: update following line and adapt for update and delete options - // when new `languageVariables.*` permissions available - $canUpdate = $kirby->user()?->role()->permissions()->for('languages', 'update') === true; + // TODO: update following line and adapt for update and + // delete options when `languageVariables.*` permissions available + $canUpdate = $kirby->role()?->permissions()->for('languages', 'update') === true; ksort($foundation); @@ -73,6 +74,10 @@ return [ ] ], 'props' => [ + 'buttons' => fn () => + ViewButtons::view('language', model: $language) + ->defaults('open', 'settings', 'delete') + ->render(), 'deletable' => $language->isDeletable(), 'code' => Escape::html($language->code()), 'default' => $language->isDefault(), @@ -113,6 +118,10 @@ return [ return [ 'component' => 'k-languages-view', 'props' => [ + 'buttons' => fn () => + ViewButtons::view('languages') + ->defaults('create') + ->render(), 'languages' => $kirby->languages()->values(fn ($language) => [ 'deletable' => $language->isDeletable(), 'default' => $language->isDefault(), diff --git a/kirby/config/areas/site.php b/kirby/config/areas/site.php index 8995d12..57a2dde 100644 --- a/kirby/config/areas/site.php +++ b/kirby/config/areas/site.php @@ -12,6 +12,7 @@ return function ($kirby) { 'icon' => $blueprint->icon() ?? 'home', 'label' => $blueprint->title() ?? I18n::translate('view.site'), 'menu' => true, + 'buttons' => require __DIR__ . '/site/buttons.php', 'dialogs' => require __DIR__ . '/site/dialogs.php', 'drawers' => require __DIR__ . '/site/drawers.php', 'dropdowns' => require __DIR__ . '/site/dropdowns.php', diff --git a/kirby/config/areas/site/buttons.php b/kirby/config/areas/site/buttons.php new file mode 100644 index 0000000..816c441 --- /dev/null +++ b/kirby/config/areas/site/buttons.php @@ -0,0 +1,72 @@ + function (Site $site, string $versionId = 'latest') { + $versionId = $versionId === 'compare' ? 'changes' : $versionId; + $link = $site->previewUrl($versionId); + + if ($link !== null) { + return new OpenButton( + link: $link, + ); + } + }, + 'site.preview' => function (Site $site) { + if ($site->previewUrl() !== null) { + return new PreviewButton( + link: $site->panel()->url(true) . '/preview/changes', + ); + } + }, + 'site.versions' => function (Site $site, string $versionId = 'latest') { + return new VersionsButton( + model: $site, + versionId: $versionId + ); + }, + 'page.open' => function (Page $page, string $versionId = 'latest') { + $versionId = $versionId === 'compare' ? 'changes' : $versionId; + $link = $page->previewUrl($versionId); + + if ($link !== null) { + return new OpenButton( + link: $link, + ); + } + }, + 'page.preview' => function (Page $page) { + if ($page->previewUrl() !== null) { + return new PreviewButton( + link: $page->panel()->url(true) . '/preview/changes', + ); + } + }, + 'page.versions' => function (Page $page, string $versionId = 'latest') { + return new VersionsButton( + model: $page, + versionId: $versionId + ); + }, + 'page.settings' => fn (Page $page) => new SettingsButton(model: $page), + 'page.status' => fn (Page $page) => new PageStatusButton($page), + + // `languages` button needs to be in site area, + // as the languages might be not loaded even in + // multilang mode when the `languages` option is deactivated + // (but content languages to switch between still can exist) + 'languages' => fn (ModelWithContent $model) => + new LanguagesDropdown($model), + + // file buttons + ...require __DIR__ . '/../files/buttons.php' +]; diff --git a/kirby/config/areas/site/dialogs.php b/kirby/config/areas/site/dialogs.php index 1a2cc1d..6b2a881 100644 --- a/kirby/config/areas/site/dialogs.php +++ b/kirby/config/areas/site/dialogs.php @@ -28,12 +28,10 @@ return [ $page = Find::page($id); if ($page->blueprint()->num() !== 'default') { - throw new PermissionException([ - 'key' => 'page.sort.permission', - 'data' => [ - 'slug' => $page->slug() - ] - ]); + throw new PermissionException( + key: 'page.sort.permission', + data: ['slug' => $page->slug()] + ); } return [ @@ -150,12 +148,10 @@ return [ $blueprints = $page->blueprints(); if (count($blueprints) <= 1) { - throw new Exception([ - 'key' => 'page.changeTemplate.invalid', - 'data' => [ - 'slug' => $id - ] - ]); + throw new Exception( + key: 'page.changeTemplate.invalid', + data: ['slug' => $id] + ); } return [ @@ -264,20 +260,17 @@ return [ // the page title changed if ($page->title()->value() !== $title) { - $page->changeTitle($title); + $page = $page->changeTitle($title); $response['event'][] = 'page.changeTitle'; } // the slug changed if ($page->slug() !== $slug) { - $newPage = $page->changeSlug($slug); $response['event'][] = 'page.changeSlug'; - $response['dispatch'] = [ - 'content/move' => [ - $oldUrl = $page->panel()->url(true), - $newUrl = $newPage->panel()->url(true) - ] - ]; + + $newPage = $page->changeSlug($slug); + $oldUrl = $page->panel()->url(true); + $newUrl = $newPage->panel()->url(true); // check for a necessary redirect after the slug has changed if (Panel::referrer() === $oldUrl && $oldUrl !== $newUrl) { @@ -372,7 +365,9 @@ return [ $page->childrenAndDrafts()->count() > 0 && $request->get('check') !== $page->title()->value() ) { - throw new InvalidArgumentException(['key' => 'page.delete.confirm']); + throw new InvalidArgumentException( + key: 'page.delete.confirm' + ); } $page->delete(true); @@ -385,7 +380,6 @@ return [ return [ 'event' => 'page.delete', - 'dispatch' => ['content/remove' => [$url]], 'redirect' => $redirect ]; } @@ -416,19 +410,17 @@ return [ if ($hasFiles === true) { $fields['files'] = [ - 'label' => I18n::translate('page.duplicate.files'), - 'type' => 'toggle', - 'required' => true, - 'width' => $toggleWidth + 'label' => I18n::translate('page.duplicate.files'), + 'type' => 'toggle', + 'width' => $toggleWidth ]; } if ($hasChildren === true) { $fields['children'] = [ - 'label' => I18n::translate('page.duplicate.pages'), - 'type' => 'toggle', - 'required' => true, - 'width' => $toggleWidth + 'label' => I18n::translate('page.duplicate.pages'), + 'type' => 'toggle', + 'width' => $toggleWidth ]; } @@ -440,11 +432,11 @@ return [ $duplicateSlug = $page->slug() . '-' . $slugAppendix; $siblingKeys = $page->parentModel()->childrenAndDrafts()->pluck('uid'); - if (in_array($duplicateSlug, $siblingKeys) === true) { + if (in_array($duplicateSlug, $siblingKeys, true) === true) { $suffixCounter = 2; $newSlug = $duplicateSlug . $suffixCounter; - while (in_array($newSlug, $siblingKeys) === true) { + while (in_array($newSlug, $siblingKeys, true) === true) { $newSlug = $duplicateSlug . ++$suffixCounter; } @@ -556,13 +548,7 @@ return [ return [ 'event' => 'page.move', - 'redirect' => $newPage->panel()->url(true), - 'dispatch' => [ - 'content/move' => [ - $oldPage->panel()->url(true), - $newPage->panel()->url(true) - ] - ], + 'redirect' => $newPage->panel()->url(true) ]; } ], @@ -643,13 +629,7 @@ return [ 'changes' => [ 'pattern' => 'changes', 'load' => function () { - $dialog = new ChangesDialog(); - return $dialog->load(); + return (new ChangesDialog())->load(); }, - 'submit' => function () { - $dialog = new ChangesDialog(); - $ids = App::instance()->request()->get('ids'); - return $dialog->submit($ids); - } ], ]; diff --git a/kirby/config/areas/site/dropdowns.php b/kirby/config/areas/site/dropdowns.php index b756cf4..207e028 100644 --- a/kirby/config/areas/site/dropdowns.php +++ b/kirby/config/areas/site/dropdowns.php @@ -1,5 +1,8 @@ panel()->dropdown(); } ], + 'page.languages' => [ + 'pattern' => 'pages/(:any)/languages', + 'options' => function (string $path) { + $page = Find::page($path); + return (new LanguagesDropdown($page))->options(); + } + ], 'page.file' => [ 'pattern' => '(pages/.*?)/files/(:any)', 'options' => $files['file'] ], + 'page.file.languages' => [ + 'pattern' => '(pages/.*?)/files/(:any)/languages', + 'options' => $files['language'] + ], + 'site.languages' => [ + 'pattern' => 'site/languages', + 'options' => function () { + $site = App::instance()->site(); + return (new LanguagesDropdown($site))->options(); + } + ], 'site.file' => [ 'pattern' => '(site)/files/(:any)', 'options' => $files['file'] + ], + 'site.file.languages' => [ + 'pattern' => '(site)/files/(:any)/languages', + 'options' => $files['language'] ] ]; diff --git a/kirby/config/areas/site/requests.php b/kirby/config/areas/site/requests.php index 74a0228..360df93 100644 --- a/kirby/config/areas/site/requests.php +++ b/kirby/config/areas/site/requests.php @@ -1,90 +1,25 @@ [ 'pattern' => 'site/tree', 'action' => function () { - $kirby = App::instance(); - $request = $kirby->request(); - $move = $request->get('move'); - $move = $move ? Find::parent($move) : null; - $parent = $request->get('parent'); - - if ($parent === null) { - $site = $kirby->site(); - $panel = $site->panel(); - $uuid = $site->uuid()?->toString(); - $url = $site->url(); - $value = $uuid ?? '/'; - - return [ - [ - 'children' => $panel->url(true), - 'disabled' => $move?->isMovableTo($site) === false, - 'hasChildren' => true, - 'icon' => 'home', - 'id' => '/', - 'label' => I18n::translate('view.site'), - 'open' => false, - 'url' => $url, - 'uuid' => $uuid, - 'value' => $value - ] - ]; - } - - $parent = Find::parent($parent); - $pages = []; - - foreach ($parent->childrenAndDrafts()->filterBy('isListable', true) as $child) { - $panel = $child->panel(); - $uuid = $child->uuid()?->toString(); - $url = $child->url(); - $value = $uuid ?? $child->id(); - - $pages[] = [ - 'children' => $panel->url(true), - 'disabled' => $move?->isMovableTo($child) === false, - 'hasChildren' => $child->hasChildren() === true || $child->hasDrafts() === true, - 'icon' => $panel->image()['icon'] ?? null, - 'id' => $child->id(), - 'open' => false, - 'label' => $child->title()->value(), - 'url' => $url, - 'uuid' => $uuid, - 'value' => $value - ]; - } - - return $pages; + return (new PageTree())->children( + parent: App::instance()->request()->get('parent'), + moving: App::instance()->request()->get('move') + ); } ], 'tree.parents' => [ 'pattern' => 'site/tree/parents', 'action' => function () { - $kirby = App::instance(); - $request = $kirby->request(); - $root = $request->get('root'); - $page = $kirby->page($request->get('page')); - $parents = $page?->parents()->flip()->values( - fn ($parent) => $parent->uuid()?->toString() ?? $parent->id() - ) ?? []; - - // if root is included, add the site as top-level parent - if ($root === 'true') { - array_unshift($parents, $kirby->site()->uuid()?->toString() ?? '/'); - } - - return [ - 'data' => $parents - ]; + return (new PageTree())->parents( + page: App::instance()->request()->get('page'), + includeSite: App::instance()->request()->get('root') === 'true', + ); } ] - // @codeCoverageIgnoreEnd ]; diff --git a/kirby/config/areas/site/searches.php b/kirby/config/areas/site/searches.php index f40f218..7f20214 100644 --- a/kirby/config/areas/site/searches.php +++ b/kirby/config/areas/site/searches.php @@ -1,56 +1,17 @@ [ 'label' => I18n::translate('pages'), 'icon' => 'page', - 'query' => function (string|null $query, int $limit, int $page) { - $kirby = App::instance(); - $pages = $kirby->site() - ->index(true) - ->search($query) - ->filter('isListable', true) - ->paginate($limit, $page); - - return [ - 'results' => $pages->values(fn ($page) => [ - 'image' => $page->panel()->image(), - 'text' => Escape::html($page->title()->value()), - 'link' => $page->panel()->url(true), - 'info' => Escape::html($page->id()), - 'uuid' => $page->uuid()?->toString(), - ]), - 'pagination' => $pages->pagination()->toArray() - ]; - } + 'query' => fn (string|null $query, int $limit, int $page) => Search::pages($query, $limit, $page) ], 'files' => [ 'label' => I18n::translate('files'), 'icon' => 'image', - 'query' => function (string|null $query, int $limit, int $page) { - $kirby = App::instance(); - $files = $kirby->site() - ->index(true) - ->filter('isListable', true) - ->files() - ->filter('isListable', true) - ->search($query) - ->paginate($limit, $page); - - return [ - 'results' => $files->values(fn ($file) => [ - 'image' => $file->panel()->image(), - 'text' => Escape::html($file->filename()), - 'link' => $file->panel()->url(true), - 'info' => Escape::html($file->id()), - 'uuid' => $file->uuid()->toString(), - ]), - 'pagination' => $files->pagination()->toArray() - ]; - } + 'query' => fn (string|null $query, int $limit, int $page) => Search::files($query, $limit, $page) ] ]; diff --git a/kirby/config/areas/site/views.php b/kirby/config/areas/site/views.php index 7465d2e..d7f9d03 100644 --- a/kirby/config/areas/site/views.php +++ b/kirby/config/areas/site/views.php @@ -2,6 +2,9 @@ use Kirby\Cms\App; use Kirby\Cms\Find; +use Kirby\Exception\PermissionException; +use Kirby\Panel\Ui\Buttons\ViewButtons; +use Kirby\Toolkit\I18n; return [ 'page' => [ @@ -14,6 +17,40 @@ return [ return Find::file('pages/' . $id, $filename)->panel()->view(); } ], + 'page.preview' => [ + 'pattern' => 'pages/(:any)/preview/(changes|latest|compare)', + 'action' => function (string $path, string $versionId) { + $page = Find::page($path); + $view = $page->panel()->view(); + $src = [ + 'latest' => $page->previewUrl('latest'), + 'changes' => $page->previewUrl('changes'), + ]; + + if ($src['latest'] === null) { + throw new PermissionException('The preview is not available'); + } + + return [ + 'component' => 'k-preview-view', + 'props' => [ + ...$view['props'], + 'back' => $view['props']['link'], + 'buttons' => fn () => + ViewButtons::view('page.preview', model: $page) + ->defaults( + 'page.versions', + 'languages', + ) + ->bind(['versionId' => $versionId]) + ->render(), + 'src' => $src, + 'versionId' => $versionId, + ], + 'title' => $view['props']['title'] . ' | ' . I18n::translate('preview'), + ]; + } + ], 'site' => [ 'pattern' => 'site', 'action' => fn () => App::instance()->site()->panel()->view() @@ -24,4 +61,38 @@ return [ return Find::file('site', $filename)->panel()->view(); } ], + 'site.preview' => [ + 'pattern' => 'site/preview/(changes|latest|compare)', + 'action' => function (string $versionId) { + $site = App::instance()->site(); + $view = $site->panel()->view(); + $src = [ + 'latest' => $site->previewUrl('latest'), + 'changes' => $site->previewUrl('changes'), + ]; + + if ($src['latest'] === null) { + throw new PermissionException('The preview is not available'); + } + + return [ + 'component' => 'k-preview-view', + 'props' => [ + ...$view['props'], + 'back' => $view['props']['link'], + 'buttons' => fn () => + ViewButtons::view('site.preview', model: $site) + ->defaults( + 'site.versions', + 'languages' + ) + ->bind(['versionId' => $versionId]) + ->render(), + 'src' => $src, + 'versionId' => $versionId + ], + 'title' => I18n::translate('view.site') . ' | ' . I18n::translate('preview'), + ]; + } + ], ]; diff --git a/kirby/config/areas/system/dialogs.php b/kirby/config/areas/system/dialogs.php index e8dd694..db8b7a5 100644 --- a/kirby/config/areas/system/dialogs.php +++ b/kirby/config/areas/system/dialogs.php @@ -53,7 +53,7 @@ return [ ]; } - throw new LogicException('The upgrade failed'); + throw new LogicException(message: 'The upgrade failed'); // @codeCoverageIgnoreEnd } ], diff --git a/kirby/config/areas/system/views.php b/kirby/config/areas/system/views.php index 87ad888..13626eb 100644 --- a/kirby/config/areas/system/views.php +++ b/kirby/config/areas/system/views.php @@ -1,6 +1,7 @@ empty($authors) ? '–' : $authors, - 'license' => $plugin->license() ?? '–', + 'license' => $plugin->license()->toArray(), 'name' => [ 'text' => $plugin->name() ?? '–', 'href' => $plugin->link(), ], + 'status' => $plugin->license()->status()->toArray(), 'version' => $version, ]; }); @@ -122,12 +124,14 @@ return [ return [ 'component' => 'k-system-view', 'props' => [ + 'buttons' => fn () => + ViewButtons::view('system')->render(), 'environment' => $environment, 'exceptions' => $debugMode ? $exceptions : [], 'info' => $system->info(), 'plugins' => $plugins, 'security' => $security, - 'urls' => $sensitive ?? null + 'urls' => $sensitive ?? [] ] ]; } diff --git a/kirby/config/areas/users.php b/kirby/config/areas/users.php index dbccc5f..05bdad7 100644 --- a/kirby/config/areas/users.php +++ b/kirby/config/areas/users.php @@ -8,6 +8,7 @@ return function ($kirby) { 'label' => I18n::translate('view.users'), 'search' => 'users', 'menu' => true, + 'buttons' => require __DIR__ . '/users/buttons.php', 'dialogs' => require __DIR__ . '/users/dialogs.php', 'drawers' => require __DIR__ . '/users/drawers.php', 'dropdowns' => require __DIR__ . '/users/dropdowns.php', diff --git a/kirby/config/areas/users/buttons.php b/kirby/config/areas/users/buttons.php new file mode 100644 index 0000000..f6fa067 --- /dev/null +++ b/kirby/config/areas/users/buttons.php @@ -0,0 +1,20 @@ + function (User $user, string|null $role = null) { + return new ViewButton( + dialog: 'users/create?role=' . $role, + disabled: $user->kirby()->roles()->canBeCreated()->count() < 1, + icon: 'add', + text: I18n::translate('user.create'), + ); + }, + 'user.settings' => function (User $user) { + return new SettingsButton(model: $user); + } +]; diff --git a/kirby/config/areas/users/dialogs.php b/kirby/config/areas/users/dialogs.php index 6c47bca..555d38d 100644 --- a/kirby/config/areas/users/dialogs.php +++ b/kirby/config/areas/users/dialogs.php @@ -57,7 +57,7 @@ return [ 'email' => '', 'password' => '', 'translation' => $kirby->panelLanguage(), - 'role' => $role ?? $roles['options'][0]['value'] ?? null + 'role' => $role ?: $roles['options'][0]['value'] ?? null ] ] ]; @@ -231,9 +231,9 @@ return [ // compare passwords if ($password !== $passwordConfirmation) { - throw new InvalidArgumentException([ - 'key' => 'user.password.notSame' - ]); + throw new InvalidArgumentException( + key: 'user.password.notSame' + ); } // change password if everything's fine @@ -319,7 +319,6 @@ return [ return [ 'event' => 'user.delete', - 'dispatch' => ['content/remove' => [$url]], 'redirect' => $redirect ]; } diff --git a/kirby/config/areas/users/dropdowns.php b/kirby/config/areas/users/dropdowns.php index ec30a5f..d3d2569 100644 --- a/kirby/config/areas/users/dropdowns.php +++ b/kirby/config/areas/users/dropdowns.php @@ -1,18 +1,29 @@ [ 'pattern' => 'users/(:any)', + 'options' => fn (string $id) => + Find::user($id)->panel()->dropdown() + ], + 'user.languages' => [ + 'pattern' => 'users/(:any)/languages', 'options' => function (string $id) { - return Find::user($id)->panel()->dropdown(); + $user = Find::user($id); + return (new LanguagesDropdown($user))->options(); } ], 'user.file' => [ 'pattern' => '(users/.*?)/files/(:any)', 'options' => $files['file'] + ], + 'user.file.languages' => [ + 'pattern' => '(users/.*?)/files/(:any)/languages', + 'options' => $files['language'] ] ]; diff --git a/kirby/config/areas/users/searches.php b/kirby/config/areas/users/searches.php index b4e4a0b..2e6431e 100644 --- a/kirby/config/areas/users/searches.php +++ b/kirby/config/areas/users/searches.php @@ -1,29 +1,12 @@ [ 'label' => I18n::translate('users'), 'icon' => 'users', - 'query' => function (string|null $query, int $limit, int $page) { - $kirby = App::instance(); - $users = $kirby->users() - ->search($query) - ->paginate($limit, $page); - - return [ - 'results' => $users->values(fn ($user) => [ - 'image' => $user->panel()->image(), - 'text' => Escape::html($user->username()), - 'link' => $user->panel()->url(true), - 'info' => Escape::html($user->role()->title()), - 'uuid' => $user->uuid()->toString(), - ]), - 'pagination' => $users->pagination()->toArray() - ]; - } + 'query' => fn (string|null $query, int $limit, int $page) => Search::users($query, $limit, $page) ] ]; diff --git a/kirby/config/areas/users/views.php b/kirby/config/areas/users/views.php index 60d9536..cf4cb7e 100644 --- a/kirby/config/areas/users/views.php +++ b/kirby/config/areas/users/views.php @@ -2,6 +2,7 @@ use Kirby\Cms\App; use Kirby\Cms\Find; +use Kirby\Panel\Ui\Buttons\ViewButtons; use Kirby\Toolkit\Escape; return [ @@ -18,7 +19,11 @@ return [ return [ 'component' => 'k-users-view', 'props' => [ - 'canCreate' => $kirby->roles()->canBeCreated()->count() > 0, + 'buttons' => fn () => + ViewButtons::view('users') + ->defaults('create') + ->bind(['role' => $role]) + ->render(), 'role' => function () use ($roles, $role) { if ($role) { return $roles[$role] ?? null; diff --git a/kirby/config/components.php b/kirby/config/components.php index 7e5b9c7..f95ecfa 100644 --- a/kirby/config/components.php +++ b/kirby/config/components.php @@ -4,11 +4,15 @@ use Kirby\Cms\App; use Kirby\Cms\Collection; use Kirby\Cms\File; use Kirby\Cms\FileVersion; +use Kirby\Cms\ModelWithContent; use Kirby\Cms\Page; use Kirby\Cms\User; +use Kirby\Content\PlainTextStorage; +use Kirby\Content\Storage; use Kirby\Data\Data; use Kirby\Email\PHPMailer as Emailer; use Kirby\Exception\NotFoundException; +use Kirby\Filesystem\Asset; use Kirby\Filesystem\F; use Kirby\Filesystem\Filename; use Kirby\Http\Uri; @@ -59,22 +63,20 @@ return [ /** * Adapt file characteristics * - * @param \Kirby\Cms\File|\Kirby\Filesystem\Asset $file The file object * @param array $options All thumb options (width, height, crop, blur, grayscale) - * @return \Kirby\Cms\File|\Kirby\Cms\FileVersion|\Kirby\Filesystem\Asset */ 'file::version' => function ( App $kirby, - $file, + File|Asset $file, array $options = [] - ) { + ): File|Asset|FileVersion { // if file is not resizable, return if ($file->isResizable() === false) { return $file; } // create url and root - $mediaRoot = dirname($file->mediaRoot()); + $mediaRoot = $file->mediaDir(); $template = $mediaRoot . '/{{ name }}{{ attributes }}.{{ extension }}'; $thumbRoot = (new Filename($file->root(), $template, $options))->toString(); $thumbName = basename($thumbRoot); @@ -85,9 +87,10 @@ return [ $job = $mediaRoot . '/.jobs/' . $thumbName . '.json'; try { - Data::write($job, array_merge($options, [ - 'filename' => $file->filename() - ])); + Data::write( + $job, + [...$options, 'filename' => $file->filename()] + ); } catch (Throwable) { // if thumb doesn't exist yet and job file cannot // be created, return @@ -99,7 +102,7 @@ return [ 'modifications' => $options, 'original' => $file, 'root' => $thumbRoot, - 'url' => dirname($file->mediaUrl()) . '/' . $thumbName, + 'url' => $file->mediaUrl($thumbName), ]); }, @@ -150,17 +153,16 @@ return [ $params = ['fields' => Str::split($params, '|')]; } - $defaults = [ + $collection = clone $collection; + $query = trim($query ?? ''); + $options = [ 'fields' => [], 'minlength' => 2, 'score' => [], 'words' => false, + ...$params ]; - $collection = clone $collection; - $options = array_merge($defaults, $params); - $query = trim($query ?? ''); - // empty or too short search query if (Str::length($query) < $options['minlength']) { return $collection->limit(0); @@ -204,10 +206,11 @@ return [ $keys[] = 'role'; } elseif ($item instanceof Page) { // apply the default score for pages - $options['score'] = array_merge( - ['id' => 64, 'title' => 64], - $options['score'] - ); + $options['score'] = [ + 'id' => 64, + 'title' => 64, + ...$options['score'] + ]; } if (empty($options['fields']) === false) { @@ -231,7 +234,7 @@ return [ $scoring['score'] += 16 * $score; $scoring['hits'] += 1; - // check for exact beginning matches + // check for exact beginning matches } elseif ( $options['words'] === false && Str::startsWith($lowerValue, $query) === true @@ -239,7 +242,7 @@ return [ $scoring['score'] += 8 * $score; $scoring['hits'] += 1; - // check for exact query matches + // check for exact query matches } elseif ($matches = preg_match_all('!' . $exact . '!ui', $value, $r)) { $scoring['score'] += 2 * $score; $scoring['hits'] += $matches; @@ -309,6 +312,16 @@ return [ return Snippet::factory($name, $data, $slots); }, + /** + * Create a new storage object for the given model + */ + 'storage' => function ( + App $kirby, + ModelWithContent $model + ): Storage { + return new PlainTextStorage(model: $model); + }, + /** * Add your own template engine * @@ -332,7 +345,6 @@ return [ * @param string $src Root of the original file * @param string $dst Template string for the root to the desired destination * @param array $options All thumb options that should be applied: `width`, `height`, `crop`, `blur`, `grayscale` - * @return string */ 'thumb' => function ( App $kirby, @@ -401,7 +413,7 @@ return [ // keep relative urls if ( $path !== null && - (substr($path, 0, 2) === './' || substr($path, 0, 3) === '../') + (str_starts_with($path, './') || str_starts_with($path, '../')) ) { return $path; } @@ -417,7 +429,9 @@ return [ $model = Uuid::for($path)->model(); if ($model === null) { - throw new NotFoundException('The model could not be found for "' . $path . '" uuid'); + throw new NotFoundException( + message: 'The model could not be found for "' . $path . '" uuid' + ); } $path = $model->url(); diff --git a/kirby/config/fields/color.php b/kirby/config/fields/color.php index 8d473f1..7daa027 100644 --- a/kirby/config/fields/color.php +++ b/kirby/config/fields/color.php @@ -1,5 +1,6 @@ function (string $format = 'hex'): string { - if (in_array($format, ['hex', 'hsl', 'rgb']) === false) { - throw new InvalidArgumentException('Unsupported format for color field (supported: hex, rgb, hsl)'); + if (in_array($format, ['hex', 'hsl', 'rgb'], true) === false) { + throw new InvalidArgumentException( + message: 'Unsupported format for color field (supported: hex, rgb, hsl)' + ); } return $format; @@ -35,8 +38,10 @@ return [ * show the `options` as toggles */ 'mode' => function (string $mode = 'picker'): string { - if (in_array($mode, ['picker', 'input', 'options']) === false) { - throw new InvalidArgumentException('Unsupported mode for color field (supported: picker, input, options)'); + if (in_array($mode, ['picker', 'input', 'options'], true) === false) { + throw new InvalidArgumentException( + message: 'Unsupported mode for color field (supported: picker, input, options)' + ); } return $mode; @@ -69,30 +74,33 @@ return [ return []; } - $options = match (true) { - // simple array of values - // or value=text (from Options class) + if ( is_numeric($options[0]['value']) || $options[0]['value'] === $options[0]['text'] - => A::map($options, fn ($option) => [ - 'value' => $option['text'] - ]), + ) { + // simple array of values + // or value=text (from Options class) + $options = A::map($options, fn ($option) => [ + 'value' => $option['text'] + ]); - // deprecated: name => value, flipping - // TODO: start throwing in warning in v5 - $this->isColor($options[0]['text']) - => A::map($options, fn ($option) => [ - 'value' => $option['text'], - // ensure that any HTML in the new text is escaped - 'text' => Escape::html($option['value']) - ]), + } elseif ($this->isColor($options[0]['text'])) { + // @deprecated 4.0.0 + // TODO: Remove in Kirby 6 - default - => A::map($options, fn ($option) => [ + Helpers::deprecated('Color field "' . $this->name . '": the text => value notation for options has been deprecated and will be removed in Kirby 6. Please rewrite your options as value => text.'); + + $options = A::map($options, fn ($option) => [ + 'value' => $option['text'], + // ensure that any HTML in the new text is escaped + 'text' => Escape::html($option['value']) + ]); + } else { + $options = A::map($options, fn ($option) => [ 'value' => $option['value'], 'text' => $option['text'] - ]), - }; + ]); + } return $options; } @@ -121,24 +129,24 @@ return [ } if ($this->format === 'hex' && $this->isHex($value) === false) { - throw new InvalidArgumentException([ - 'key' => 'validation.color', - 'data' => ['format' => 'hex'] - ]); + throw new InvalidArgumentException( + key: 'validation.color', + data: ['format' => 'hex'] + ); } if ($this->format === 'rgb' && $this->isRgb($value) === false) { - throw new InvalidArgumentException([ - 'key' => 'validation.color', - 'data' => ['format' => 'rgb'] - ]); + throw new InvalidArgumentException( + key: 'validation.color', + data: ['format' => 'rgb'] + ); } if ($this->format === 'hsl' && $this->isHsl($value) === false) { - throw new InvalidArgumentException([ - 'key' => 'validation.color', - 'data' => ['format' => 'hsl'] - ]); + throw new InvalidArgumentException( + key: 'validation.color', + data: ['format' => 'hsl'] + ); } } ] diff --git a/kirby/config/fields/date.php b/kirby/config/fields/date.php index 34559db..845b7cc 100644 --- a/kirby/config/fields/date.php +++ b/kirby/config/fields/date.php @@ -125,27 +125,27 @@ return [ $format = $this->time === false ? 'd.m.Y' : 'd.m.Y H:i'; if ($min && $max && $value->isBetween($min, $max) === false) { - throw new Exception([ - 'key' => 'validation.date.between', - 'data' => [ + throw new Exception( + key: 'validation.date.between', + data: [ 'min' => $min->format($format), 'max' => $max->format($format) ] - ]); - } elseif ($min && $value->isMin($min) === false) { - throw new Exception([ - 'key' => 'validation.date.after', - 'data' => [ - 'date' => $min->format($format), - ] - ]); - } elseif ($max && $value->isMax($max) === false) { - throw new Exception([ - 'key' => 'validation.date.before', - 'data' => [ - 'date' => $max->format($format), - ] - ]); + ); + } + + if ($min && $value->isMin($min) === false) { + throw new Exception( + key: 'validation.date.after', + data: ['date' => $min->format($format)] + ); + } + + if ($max && $value->isMax($max) === false) { + throw new Exception( + key: 'validation.date.before', + data: ['date' => $max->format($format)] + ); } return true; diff --git a/kirby/config/fields/link.php b/kirby/config/fields/link.php index 9493c3e..7cab839 100644 --- a/kirby/config/fields/link.php +++ b/kirby/config/fields/link.php @@ -48,7 +48,7 @@ return [ 'activeTypes' => function () { return array_filter( $this->availableTypes(), - fn (string $type) => in_array($type, $this->props['options']), + fn (string $type) => in_array($type, $this->props['options'], true), ARRAY_FILTER_USE_KEY ); }, @@ -153,17 +153,17 @@ return [ $detected = true; if ($options['validate']($link) === false) { - throw new InvalidArgumentException([ - 'key' => 'validation.' . $type - ]); + throw new InvalidArgumentException( + key: 'validation.' . $type + ); } } // none of the configured types has been detected if ($detected === false) { - throw new InvalidArgumentException([ - 'key' => 'validation.linkType' - ]); + throw new InvalidArgumentException( + key: 'validation.linkType' + ); } return true; diff --git a/kirby/config/fields/mixins/layout.php b/kirby/config/fields/mixins/layout.php index 4f94b0f..a3ee027 100644 --- a/kirby/config/fields/mixins/layout.php +++ b/kirby/config/fields/mixins/layout.php @@ -7,8 +7,11 @@ return [ * Available layouts: `list`, `cardlets`, `cards` */ 'layout' => function (string $layout = 'list') { - $layouts = ['list', 'cardlets', 'cards']; - return in_array($layout, $layouts) ? $layout : 'list'; + return match ($layout) { + 'cards' => 'cards', + 'cardlets' => 'cardlets', + default => 'list' + }; }, /** diff --git a/kirby/config/fields/mixins/options.php b/kirby/config/fields/mixins/options.php index a3625f3..0f99ea4 100644 --- a/kirby/config/fields/mixins/options.php +++ b/kirby/config/fields/mixins/options.php @@ -36,7 +36,7 @@ return [ }, 'sanitizeOption' => function ($value) { $options = array_column($this->options(), 'value'); - return in_array($value, $options) === true ? $value : null; + return in_array($value, $options) ? $value : null; }, 'sanitizeOptions' => function ($values) { $options = array_column($this->options(), 'value'); diff --git a/kirby/config/fields/mixins/upload.php b/kirby/config/fields/mixins/upload.php index ec136bd..7cfcf5d 100644 --- a/kirby/config/fields/mixins/upload.php +++ b/kirby/config/fields/mixins/upload.php @@ -34,7 +34,9 @@ return [ $parent = $this->uploadParent($uploads['parent'] ?? null); if ($parent === null) { - throw new InvalidArgumentException('"' . $uploads['parent'] . '" could not be resolved as a valid parent for the upload'); + throw new InvalidArgumentException( + message: '"' . $uploads['parent'] . '" could not be resolved as a valid parent for the upload' + ); } $file = new File([ @@ -52,7 +54,9 @@ return [ 'methods' => [ 'upload' => function (Api $api, $params, Closure $map) { if ($params === false) { - throw new Exception('Uploads are disabled for this field'); + throw new Exception( + message: 'Uploads are disabled for this field' + ); } $parent = $this->uploadParent($params['parent'] ?? null); @@ -68,7 +72,9 @@ return [ $file = $parent->createFile($props, true); if ($file instanceof File === false) { - throw new Exception('The file could not be uploaded'); + throw new Exception( + message: 'The file could not be uploaded' + ); } return $map($file, $parent); diff --git a/kirby/config/fields/number.php b/kirby/config/fields/number.php index d0966bf..128c733 100644 --- a/kirby/config/fields/number.php +++ b/kirby/config/fields/number.php @@ -38,7 +38,7 @@ return [ ], 'methods' => [ 'toNumber' => function ($value): float|null { - if ($this->isEmpty($value) === true) { + if ($this->isEmptyValue($value) === true) { return null; } diff --git a/kirby/config/fields/object.php b/kirby/config/fields/object.php index 57cd2e4..d795d28 100644 --- a/kirby/config/fields/object.php +++ b/kirby/config/fields/object.php @@ -91,13 +91,13 @@ return [ $name = array_key_first($errors); $error = $errors[$name]; - throw new InvalidArgumentException([ - 'key' => 'object.validation', - 'data' => [ + throw new InvalidArgumentException( + key: 'object.validation', + data: [ 'label' => $error['label'] ?? $name, 'message' => implode("\n", $error['message']) ] - ]); + ); } } ] diff --git a/kirby/config/fields/radio.php b/kirby/config/fields/radio.php index 4846053..9ec7c43 100644 --- a/kirby/config/fields/radio.php +++ b/kirby/config/fields/radio.php @@ -20,7 +20,8 @@ return [ ], 'computed' => [ 'default' => function () { - return $this->sanitizeOption($this->default); + $default = $this->model()->toString($this->default); + return $this->sanitizeOption($default); }, 'value' => function () { return $this->sanitizeOption($this->value) ?? ''; diff --git a/kirby/config/fields/select.php b/kirby/config/fields/select.php index 733f51f..05a9c55 100644 --- a/kirby/config/fields/select.php +++ b/kirby/config/fields/select.php @@ -18,7 +18,7 @@ return [ return $icon; }, /** - * Custom placeholder string for empty option. + * Text shown when no option is selected yet */ 'placeholder' => function (string|array $placeholder = '—') { return I18n::translate($placeholder, $placeholder); diff --git a/kirby/config/fields/structure.php b/kirby/config/fields/structure.php index 66b614c..3fb05d2 100644 --- a/kirby/config/fields/structure.php +++ b/kirby/config/fields/structure.php @@ -149,7 +149,7 @@ return [ // make the first column visible on mobile // if no other mobile columns are defined - if (in_array(true, array_column($columns, 'mobile')) === false) { + if (in_array(true, array_column($columns, 'mobile'), true) === false) { $columns[array_key_first($columns)]['mobile'] = true; } @@ -166,24 +166,37 @@ return [ continue; } - $value[] = $this->form($row)->values(); + $value[] = $this->form()->fill(input: $row, passthrough: true)->toFormValues(); } return $value; }, - 'form' => function (array $values = []) { - return new Form([ - 'fields' => $this->attrs['fields'] ?? [], - 'values' => $values, - 'model' => $this->model - ]); - }, + 'form' => function () { + $this->form ??= new Form( + fields: $this->attrs['fields'] ?? [], + model: $this->model, + language: 'current' + ); + + return $this->form->reset(); + } ], 'save' => function ($value) { - $data = []; + $data = []; + $form = $this->form(); + $defaults = $form->defaults(); - foreach ($value as $row) { - $row = $this->form($row)->content(); + foreach ($value as $index => $row) { + $row = $form + ->reset() + ->fill( + input: $defaults, + ) + ->submit( + input: $row, + passthrough: true + ) + ->toStoredValues(); // remove frontend helper id unset($row['_id']); @@ -204,19 +217,20 @@ return [ $values = A::wrap($value); foreach ($values as $index => $value) { - $form = $this->form($value); + $form = $this->form(); + $form->fill(input: $value); foreach ($form->fields() as $field) { $errors = $field->errors(); if (empty($errors) === false) { - throw new InvalidArgumentException([ - 'key' => 'structure.validation', - 'data' => [ + throw new InvalidArgumentException( + key: 'structure.validation', + data: [ 'field' => $field->label() ?? Str::ucfirst($field->name()), 'index' => $index + 1 ] - ]); + ); } } } diff --git a/kirby/config/fields/text.php b/kirby/config/fields/text.php index ac87d85..04f8c28 100644 --- a/kirby/config/fields/text.php +++ b/kirby/config/fields/text.php @@ -10,11 +10,14 @@ return [ * The field value will be converted with the selected converter before the value gets saved. Available converters: `lower`, `upper`, `ucfirst`, `slug` */ 'converter' => function ($value = null) { - if ($value !== null && array_key_exists($value, $this->converters()) === false) { - throw new InvalidArgumentException([ - 'key' => 'field.converter.invalid', - 'data' => ['converter' => $value] - ]); + if ( + $value !== null && + array_key_exists($value, $this->converters()) === false + ) { + throw new InvalidArgumentException( + key: 'field.converter.invalid', + data: ['converter' => $value] + ); } return $value; diff --git a/kirby/config/fields/textarea.php b/kirby/config/fields/textarea.php index e09d6c1..f977fa1 100644 --- a/kirby/config/fields/textarea.php +++ b/kirby/config/fields/textarea.php @@ -89,12 +89,11 @@ return [ [ 'pattern' => 'files', 'action' => function () { - $params = array_merge($this->field()->files(), [ + return $this->field()->filepicker([ + ...$this->field()->files(), 'page' => $this->requestQuery('page'), 'search' => $this->requestQuery('search') ]); - - return $this->field()->filepicker($params); } ], [ @@ -104,14 +103,12 @@ return [ $field = $this->field(); $uploads = $field->uploads(); - return $this->field()->upload($this, $uploads, function ($file, $parent) use ($field) { - $absolute = $field->model()->is($parent) === false; - - return [ - 'filename' => $file->filename(), - 'dragText' => $file->panel()->dragText('auto', $absolute), - ]; - }); + return $this->field()->upload($this, $uploads, fn ($file, $parent) => [ + 'filename' => $file->filename(), + 'dragText' => $file->panel()->dragText( + absolute: $field->model()->is($parent) === false + ), + ]); } ] ]; diff --git a/kirby/config/fields/time.php b/kirby/config/fields/time.php index 413420b..5ad7388 100644 --- a/kirby/config/fields/time.php +++ b/kirby/config/fields/time.php @@ -1,6 +1,6 @@ isBetween($min, $max) === false) { - throw new Exception([ - 'key' => 'validation.time.between', - 'data' => [ + throw new InvalidArgumentException( + key: 'validation.time.between', + data: [ 'min' => $min->format($format), 'max' => $min->format($format) ] - ]); - } elseif ($min && $value->isMin($min) === false) { - throw new Exception([ - 'key' => 'validation.time.after', - 'data' => [ - 'time' => $min->format($format), - ] - ]); - } elseif ($max && $value->isMax($max) === false) { - throw new Exception([ - 'key' => 'validation.time.before', - 'data' => [ - 'time' => $max->format($format), - ] - ]); + ); + } + + if ($min && $value->isMin($min) === false) { + throw new InvalidArgumentException( + key: 'validation.time.after', + data: ['time' => $min->format($format)] + ); + } + + if ($max && $value->isMax($max) === false) { + throw new InvalidArgumentException( + key: 'validation.time.before', + data: ['time' => $max->format($format)] + ); } return true; diff --git a/kirby/config/fields/toggle.php b/kirby/config/fields/toggle.php index a9b7897..c3b89d0 100644 --- a/kirby/config/fields/toggle.php +++ b/kirby/config/fields/toggle.php @@ -65,8 +65,13 @@ return [ 'validations' => [ 'boolean', 'required' => function ($value) { - if ($this->isRequired() && ($value === false || $this->isEmpty($value))) { - throw new InvalidArgumentException(I18n::translate('field.required')); + if ( + $this->isRequired() && + ($value === false || $this->isEmptyValue($value)) + ) { + throw new InvalidArgumentException( + message: I18n::translate('field.required') + ); } }, ] diff --git a/kirby/config/fields/writer.php b/kirby/config/fields/writer.php index 72440ff..43fdbcd 100644 --- a/kirby/config/fields/writer.php +++ b/kirby/config/fields/writer.php @@ -79,10 +79,10 @@ return [ $this->minlength && V::minLength(strip_tags($value), $this->minlength) === false ) { - throw new InvalidArgumentException([ - 'key' => 'validation.minlength', - 'data' => ['min' => $this->minlength] - ]); + throw new InvalidArgumentException( + key: 'validation.minlength', + data: ['min' => $this->minlength] + ); } }, 'maxlength' => function ($value) { @@ -90,10 +90,10 @@ return [ $this->maxlength && V::maxLength(strip_tags($value), $this->maxlength) === false ) { - throw new InvalidArgumentException([ - 'key' => 'validation.maxlength', - 'data' => ['max' => $this->maxlength] - ]); + throw new InvalidArgumentException( + key: 'validation.maxlength', + data: ['max' => $this->maxlength] + ); } }, ] diff --git a/kirby/config/helpers.php b/kirby/config/helpers.php index 79e13dd..aaf8574 100644 --- a/kirby/config/helpers.php +++ b/kirby/config/helpers.php @@ -55,7 +55,7 @@ if (Helpers::hasOverride('collection') === false) { // @codeCoverageIgnore * Returns the result of a collection by name * * @return \Kirby\Toolkit\Collection|null - * @todo 5.0 Add return type declaration + * @todo 6.0 Add return type declaration */ function collection(string $name, array $options = []) { diff --git a/kirby/config/methods.php b/kirby/config/methods.php index 760ab24..bf8bccb 100644 --- a/kirby/config/methods.php +++ b/kirby/config/methods.php @@ -2,6 +2,7 @@ use Kirby\Cms\App; use Kirby\Cms\Blocks; +use Kirby\Cms\Collection; use Kirby\Cms\File; use Kirby\Cms\Files; use Kirby\Cms\Html; @@ -80,7 +81,9 @@ return function (App $app) { $message .= ' on parent "' . $parent->title() . '"'; } - throw new InvalidArgumentException($message); + throw new InvalidArgumentException( + message: $message + ); } }, @@ -130,6 +133,18 @@ return function (App $app) { return Str::date($time, $format); }, + /** + * Parse yaml entries data and convert it to a + * collection of field objects + */ + 'toEntries' => function (Field $field): Collection { + $entries = new Collection(parent: $field->parent()); + foreach ($field->yaml() as $index => $entry) { + $entries->append(new Field($field->parent(), $index, $entry)); + } + return $entries; + }, + /** * Returns a file object from a filename in the field */ @@ -266,7 +281,9 @@ return function (App $app) { $message .= ' on parent "' . $parent->id() . '"'; } - throw new InvalidArgumentException($message); + throw new InvalidArgumentException( + message: $message + ); } }, diff --git a/kirby/config/presets/pages.php b/kirby/config/presets/pages.php index a2c7714..517f84d 100644 --- a/kirby/config/presets/pages.php +++ b/kirby/config/presets/pages.php @@ -40,19 +40,36 @@ return function (array $props) { if ($drafts !== false) { - $sections['drafts'] = $section(I18n::translate('pages.status.draft'), 'drafts', $drafts); + $sections['drafts'] = $section( + I18n::translate('pages.status.draft'), + 'drafts', + $drafts + ); } if ($unlisted !== false) { - $sections['unlisted'] = $section(I18n::translate('pages.status.unlisted'), 'unlisted', $unlisted); + $sections['unlisted'] = $section( + I18n::translate('pages.status.unlisted'), + 'unlisted', + $unlisted + ); } if ($listed !== false) { - $sections['listed'] = $section(I18n::translate('pages.status.listed'), 'listed', $listed); + $sections['listed'] = $section( + I18n::translate('pages.status.listed'), + 'listed', + $listed + ); } // cleaning up - unset($props['drafts'], $props['unlisted'], $props['listed'], $props['templates']); + unset( + $props['drafts'], + $props['unlisted'], + $props['listed'], + $props['templates'] + ); - return array_merge($props, ['sections' => $sections]); + return [...$props, 'sections' => $sections]; }; diff --git a/kirby/config/routes.php b/kirby/config/routes.php index 0699ef1..e03a187 100644 --- a/kirby/config/routes.php +++ b/kirby/config/routes.php @@ -3,9 +3,9 @@ use Kirby\Cms\App; use Kirby\Cms\LanguageRoutes; use Kirby\Cms\Media; -use Kirby\Cms\PluginAssets; use Kirby\Panel\Panel; use Kirby\Panel\Plugins; +use Kirby\Plugin\Assets; use Kirby\Toolkit\Str; use Kirby\Uuid\Uuid; @@ -71,7 +71,7 @@ return function (App $kirby) { string $hash, string $path ) { - return PluginAssets::resolve( + return Assets::resolve( $provider . '/' . $pluginName, $hash, $path diff --git a/kirby/config/sections/fields.php b/kirby/config/sections/fields.php index 7eb79ba..dd72579 100644 --- a/kirby/config/sections/fields.php +++ b/kirby/config/sections/fields.php @@ -1,7 +1,5 @@ [ 'form' => function () { - $fields = $this->fields; - $disabled = $this->model->permissions()->update() === false; - $lang = $this->model->kirby()->languageCode(); - $content = $this->model->content($lang)->toArray(); - - if ($disabled === true) { - foreach ($fields as $key => $props) { - $fields[$key]['disabled'] = true; - } - } - - return new Form([ - 'fields' => $fields, - 'values' => $content, - 'model' => $this->model, - 'strict' => true - ]); + return new Form( + fields: $this->fields, + model: $this->model, + language: 'current' + ); }, 'fields' => function () { - $fields = $this->form->fields()->toArray(); - - if ( - $this->model instanceof Page || - $this->model instanceof Site - ) { - // the title should never be updated directly via - // fields section to avoid conflicts with the rename dialog - unset($fields['title']); - } - - foreach ($fields as $index => $props) { - unset($fields[$index]['value']); - } - - return $fields; + return $this->form->fields()->toProps(); } ], 'methods' => [ 'errors' => function () { + $this->form->fill($this->model->content('current')->toArray()); return $this->form->errors(); } ], diff --git a/kirby/config/sections/files.php b/kirby/config/sections/files.php index 8bab322..254e684 100644 --- a/kirby/config/sections/files.php +++ b/kirby/config/sections/files.php @@ -6,6 +6,7 @@ use Kirby\Toolkit\I18n; return [ 'mixins' => [ + 'batch', 'details', 'empty', 'headline', @@ -90,14 +91,15 @@ return [ $files = $files->flip(); } + return $files; + }, + 'modelsPaginated' => function () { // apply the default pagination - $files = $files->paginate([ + return $this->models()->paginate([ 'page' => $this->page, 'limit' => $this->limit, 'method' => 'none' // the page is manually provided ]); - - return $files; }, 'files' => function () { return $this->models; @@ -105,15 +107,16 @@ return [ 'data' => function () { $data = []; - // the drag text needs to be absolute when the files come from - // a different parent model - $dragTextAbsolute = $this->model->is($this->parent) === false; - - foreach ($this->models as $file) { - $panel = $file->panel(); + foreach ($this->modelsPaginated() as $file) { + $panel = $file->panel(); + $permissions = $file->permissions(); $item = [ - 'dragText' => $panel->dragText('auto', $dragTextAbsolute), + 'dragText' => $panel->dragText( + // the drag text needs to be absolute + // when the files come from a different parent model + absolute: $this->model->is($this->parent) === false + ), 'extension' => $file->extension(), 'filename' => $file->filename(), 'id' => $file->id(), @@ -125,6 +128,10 @@ return [ 'link' => $panel->url(true), 'mime' => $file->mime(), 'parent' => $file->parent()->panel()->path(), + 'permissions' => [ + 'delete' => $permissions->can('delete'), + 'sort' => $permissions->can('sort'), + ], 'template' => $file->template(), 'text' => $file->toSafeString($this->text), 'url' => $file->url(), @@ -140,7 +147,7 @@ return [ return $data; }, 'total' => function () { - return $this->models->pagination()->total(); + return $this->models()->count(); }, 'errors' => function () { $errors = []; @@ -179,14 +186,8 @@ return [ } // count all uploaded files - $max = $this->max ? $this->max - $this->total : null; - - if ($this->max && $this->total === $this->max - 1) { - $multiple = false; - } else { - $multiple = true; - } - + $max = $this->max ? $this->max - $this->total : null; + $multiple = !$max || $max > 1; $template = $this->template === 'default' ? null : $this->template; return [ @@ -220,6 +221,15 @@ return [ return true; } + ], + [ + 'pattern' => 'delete', + 'method' => 'DELETE', + 'action' => function () { + return $this->section()->deleteSelected( + ids: $this->requestBody('ids'), + ); + } ] ]; }, @@ -231,6 +241,7 @@ return [ 'options' => [ 'accept' => $this->accept, 'apiUrl' => $this->parent->apiUrl(true) . '/sections/' . $this->name, + 'batch' => $this->batch, 'columns' => $this->columnsWithTypes(), 'empty' => $this->empty, 'headline' => $this->headline, diff --git a/kirby/config/sections/mixins/batch.php b/kirby/config/sections/mixins/batch.php new file mode 100644 index 0000000..25128f2 --- /dev/null +++ b/kirby/config/sections/mixins/batch.php @@ -0,0 +1,45 @@ + [ + /** + * Activates the batch delete option for the section + */ + 'batch' => function (bool $batch = false) { + return $batch; + }, + ], + 'methods' => [ + 'deleteSelected' => function (array $ids): bool { + if ($ids === []) { + return true; + } + + // check if batch deletion is allowed + if ($this->batch() === false) { + throw new PermissionException( + message: 'The section does not support batch actions' + ); + } + + $min = $this->min(); + + // check if the section has enough items after the deletion + if ($this->total() - count($ids) < $min) { + throw new Exception( + message: I18n::template('error.section.' . $this->type() . '.min.' . I18n::form($min), [ + 'min' => $min, + 'section' => $this->headline() + ]) + ); + } + + $this->models()->delete($ids); + return true; + } + ] +]; diff --git a/kirby/config/sections/mixins/layout.php b/kirby/config/sections/mixins/layout.php index b348176..1cd41bf 100644 --- a/kirby/config/sections/mixins/layout.php +++ b/kirby/config/sections/mixins/layout.php @@ -19,7 +19,7 @@ return [ */ 'layout' => function (string $layout = 'list') { $layouts = ['list', 'cardlets', 'cards', 'table']; - return in_array($layout, $layouts) ? $layout : 'list'; + return in_array($layout, $layouts, true) ? $layout : 'list'; }, /** * Whether the raw content file values should be used for the table column previews. Should not be used unless it eases performance issues in your setup introduced with Kirby 4.2 diff --git a/kirby/config/sections/mixins/parent.php b/kirby/config/sections/mixins/parent.php index 1217411..463e643 100644 --- a/kirby/config/sections/mixins/parent.php +++ b/kirby/config/sections/mixins/parent.php @@ -24,7 +24,9 @@ return [ $parent = $this->model->query($query); if (!$parent) { - throw new Exception('The parent for the query "' . $query . '" cannot be found in the section "' . $this->name() . '"'); + throw new Exception( + message: 'The parent for the query "' . $query . '" cannot be found in the section "' . $this->name() . '"' + ); } if ( @@ -33,7 +35,9 @@ return [ $parent instanceof File === false && $parent instanceof User === false ) { - throw new Exception('The parent for the section "' . $this->name() . '" has to be a page, site or user object'); + throw new Exception( + message: 'The parent for the section "' . $this->name() . '" has to be a page, site or user object' + ); } } diff --git a/kirby/config/sections/mixins/sort.php b/kirby/config/sections/mixins/sort.php index 118e03b..185cc6d 100644 --- a/kirby/config/sections/mixins/sort.php +++ b/kirby/config/sections/mixins/sort.php @@ -29,7 +29,7 @@ return [ if ( $this->type === 'pages' && - in_array($this->status, ['listed', 'published', 'all']) === false + in_array($this->status, ['listed', 'published', 'all'], true) === false ) { return false; } diff --git a/kirby/config/sections/pages.php b/kirby/config/sections/pages.php index 6ca1090..fe3d47c 100644 --- a/kirby/config/sections/pages.php +++ b/kirby/config/sections/pages.php @@ -10,6 +10,7 @@ use Kirby\Toolkit\I18n; return [ 'mixins' => [ + 'batch', 'details', 'empty', 'headline', @@ -44,7 +45,7 @@ return [ $status = 'draft'; } - if (in_array($status, ['all', 'draft', 'published', 'listed', 'unlisted']) === false) { + if (in_array($status, ['all', 'draft', 'published', 'listed', 'unlisted'], true) === false) { $status = 'all'; } @@ -77,7 +78,9 @@ return [ $parent instanceof Site === false && $parent instanceof Page === false ) { - throw new InvalidArgumentException('The parent is invalid. You must choose the site or a page as parent.'); + throw new InvalidArgumentException( + message: 'The parent is invalid. You must choose the site or a page as parent.' + ); } return $parent; @@ -111,7 +114,7 @@ return [ // filter by all set templates if ( $this->templates && - in_array($intendedTemplate, $this->templates) === false + in_array($intendedTemplate, $this->templates, true) === false ) { return false; } @@ -119,7 +122,7 @@ return [ // exclude by all ignored templates if ( $this->templatesIgnore && - in_array($intendedTemplate, $this->templatesIgnore) === true + in_array($intendedTemplate, $this->templatesIgnore, true) === true ) { return false; } @@ -147,25 +150,26 @@ return [ $pages = $pages->flip(); } + return $pages; + }, + 'modelsPaginated' => function () { // pagination - $pages = $pages->paginate([ + return $this->models()->paginate([ 'page' => $this->page, 'limit' => $this->limit, 'method' => 'none' // the page is manually provided ]); - - return $pages; }, 'pages' => function () { return $this->models; }, 'total' => function () { - return $this->models->pagination()->total(); + return $this->models()->count(); }, 'data' => function () { $data = []; - foreach ($this->models as $page) { + foreach ($this->modelsPaginated() as $page) { $panel = $page->panel(); $permissions = $page->permissions(); @@ -180,10 +184,11 @@ return [ 'link' => $panel->url(true), 'parent' => $page->parentId(), 'permissions' => [ - 'sort' => $permissions->can('sort'), + 'delete' => $permissions->can('delete'), 'changeSlug' => $permissions->can('changeSlug'), 'changeStatus' => $permissions->can('changeStatus'), 'changeTitle' => $permissions->can('changeTitle'), + 'sort' => $permissions->can('sort'), ], 'status' => $page->status(), 'template' => $page->intendedTemplate()->name(), @@ -313,12 +318,28 @@ return [ return $blueprints; }, ], + // @codeCoverageIgnoreStart + 'api' => function () { + return [ + [ + 'pattern' => 'delete', + 'method' => 'DELETE', + 'action' => function () { + return $this->section()->deleteSelected( + ids: $this->requestBody('ids'), + ); + } + ] + ]; + }, + // @codeCoverageIgnoreEnd 'toArray' => function () { return [ 'data' => $this->data, 'errors' => $this->errors, 'options' => [ 'add' => $this->add, + 'batch' => $this->batch, 'columns' => $this->columnsWithTypes(), 'empty' => $this->empty, 'headline' => $this->headline, diff --git a/kirby/config/tags.php b/kirby/config/tags.php index 240a365..9f98127 100644 --- a/kirby/config/tags.php +++ b/kirby/config/tags.php @@ -216,14 +216,18 @@ return [ // if url is empty, throw exception or link to the error page if ($tag->value === null) { if ($tag->kirby()->option('debug', false) === true) { + $error = 'The linked page cannot be found'; + if (empty($tag->text) === false) { - throw new NotFoundException('The linked page cannot be found for the link text "' . $tag->text . '"'); - } else { - throw new NotFoundException('The linked page cannot be found'); + $error .= ' for the link text "' . $tag->text . '"'; } - } else { - $tag->value = Url::to($tag->kirby()->site()->errorPageId()); + + throw new NotFoundException( + message: $error + ); } + + $tag->value = Url::to($tag->kirby()->site()->errorPageId()); } return Html::a($tag->value, $tag->text, [ diff --git a/kirby/i18n/translations/bg.json b/kirby/i18n/translations/bg.json index 4a483a3..94c0d78 100644 --- a/kirby/i18n/translations/bg.json +++ b/kirby/i18n/translations/bg.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/bs.json b/kirby/i18n/translations/bs.json new file mode 100644 index 0000000..5d44fbe --- /dev/null +++ b/kirby/i18n/translations/bs.json @@ -0,0 +1,799 @@ +{ + "account.changeName": "Promijeni svoje ime", + "account.delete": "Obriši svoj račun", + "account.delete.confirm": "Da li stvarno želite obrisati svoj račun? Odmah ćete biti odjavljeni. Vaš račun neće biti moguće oporaviti.", + + "activate": "Aktiviraj", + "add": "Dodaj", + "alpha": "Alpha", + "author": "Autor", + "avatar": "Profilna slika", + "back": "Natrag", + "cancel": "Odustani", + "change": "Promijeni", + "close": "Zatvori", + "changes": "Promjene", + "confirm": "Ok", + "collapse": "Skupi", + "collapse.all": "Skupi sve", + "color": "Boja", + "coordinates": "Koordinate", + "copy": "Kopiraj", + "copy.all": "Kopiraj sve", + "copy.success": "Kopirano", + "copy.success.multiple": "{count} kopirano!", + "copy.url": "Kopiraj URL", + "create": "Kreiraj", + "custom": "Prilagođeno", + + "date": "Datum", + "date.select": "Odaberi datum", + + "day": "Dan", + "days.fri": "Pet", + "days.mon": "Pon", + "days.sat": "Sub", + "days.sun": "Ned", + "days.thu": "Čet", + "days.tue": "Uto", + "days.wed": "Sri", + + "debugging": "Debugiranje", + + "delete": "Obriši", + "delete.all": "Obriši sve", + + "dialog.fields.empty": "Ovaj dijalog nema polja", + "dialog.files.empty": "Nema datoteka za odabir", + "dialog.pages.empty": "Nema stranica za odabir", + "dialog.text.empty": "Ovaj dijalog ne definira nikakav tekst", + "dialog.users.empty": "Nema korisnika za odabir", + + "dimensions": "Dimenzije", + "disable": "Onemogući", + "disabled": "Onemogućeno", + "discard": "Odbaci", + + "drawer.fields.empty": "Ova ladica nema polja", + + "domain": "Domena", + "download": "Download", + "duplicate": "Dupliciraj", + + "edit": "Uredi", + + "email": "Email", + "email.placeholder": "mail@example.com", + + "enter": "Enter", + "entries": "Unosi", + "entry": "Unos", + + "environment": "Okruženje", + + "error": "Greška", + "error.access.code": "Nevažeći kod", + "error.access.login": "Nevažeći login", + "error.access.panel": "Pristup panelu nije dozvoljen", + "error.access.view": "Pristup ovom dijelu panela nije dozvoljen", + + "error.avatar.create.fail": "Profilnu sliku nije moguće spremiti", + "error.avatar.delete.fail": "Profilna slika se ne može obrisati", + "error.avatar.dimensions.invalid": "Nevažeće dimenzije. Promijenite visinu i širinu profilne slike ispod 3000 piksela", + "error.avatar.mime.forbidden": "Profilna slika mora biti u JPEG ili PNG formatu", + + "error.blueprint.notFound": "Blueprint \"{name}\" nije pronađen", + + "error.blocks.max.plural": "Ne smijete dodati više od {max} blokova", + "error.blocks.max.singular": "Ne smijete dodati više od jednog bloka", + "error.blocks.min.plural": "Morate dodati najmanje {min} blokova", + "error.blocks.min.singular": "Morate dodati najmanje jedan blok", + "error.blocks.validation": "Postoji greška kod \"{field}\" polja, u bloku {index}, pri korištenju bloka tipa \"{fieldset}\" ", + + "error.cache.type.invalid": "Nevažeći tip za cache \"{type}\"", + + "error.content.lock.delete": "Ova verzija je zaključana i ne može se obrisati", + "error.content.lock.move": "Izvorna verzija je zaključana i ne može se premjestiti", + "error.content.lock.publish": "Ova verzija je već objavljena", + "error.content.lock.replace": "Ova verzija je zaključana i ne može se zamijeniti", + "error.content.lock.update": "Ova verzija je zaključana i ne može se urediti", + + "error.entries.max.plural": "Ne smijete dodati više od {max} unosa", + "error.entries.max.singular": "Ne smijete dodati više od jednog unosa", + "error.entries.min.plural": "Morate dodati najmanje {min} unosa", + "error.entries.min.singular": "Morate dodati najmanje jedan unos", + "error.entries.supports": "\"{type}\" tip polja nije podržan za polje unosa", + "error.entries.validation": "Postoji greška na \"{field}\" polju u redu {index}", + + "error.email.preset.notFound": "Email preset \"{name}\" nije pronađen", + + "error.field.converter.invalid": "Nevažeći Converter \"{converter}\"", + "error.field.link.options": "Nevažeće opcije: {options}", + "error.field.type.missing": "Polje \"{name}\": Tip polja \"{type}\" ne postoji", + + "error.file.changeName.empty": "Naziv ne smije biti prazan", + "error.file.changeName.permission": "Nemate dozvolu da promijenite naziv datoteke \"{filename}\"", + "error.file.changeTemplate.invalid": "Predložak za datoteku \"{id}\" se ne može promijeniti u \"{template}\" (dozvoljeno: \"{blueprints}\")", + "error.file.changeTemplate.permission": "Nemate dozvolu da promijenite predložak za datoteku \"{id}\"", + + "error.file.delete.multiple": "Nije bilo moguće obrisati sve datoteke. Pokušajte ih obrisati pojedinačno da bi vidjeli specifičnu grešku koja sprječava brisanje. ", + "error.file.duplicate": "Datoteka sa imenom \"{filename}\" već postoji", + "error.file.extension.forbidden": "Ekstenzija \"{extension}\" nije dozvoljena", + "error.file.extension.invalid": "Nevažeća ekstenzija: {extension}", + "error.file.extension.missing": "Ekstenzija za datoteku \"{filename}\" nedostaje", + "error.file.maxheight": "Visina slike ne smije prelaziti {height} piksela", + "error.file.maxsize": "Datoteka je prevelika", + "error.file.maxwidth": "Širina slike ne smije prelaziti {width} piksela", + "error.file.mime.differs": "Uploadana datoteka mora biti istog mime tipa \"{mime}\"", + "error.file.mime.forbidden": "Tip medija \"{mime}\" nije dozvoljen", + "error.file.mime.invalid": "Nevažeći mime tip: {mime}", + "error.file.mime.missing": "Tip medija za \"{filename}\" se ne može očitati", + "error.file.minheight": "Visina slike mora biti najmanje {height} piksela", + "error.file.minsize": "Datoteka je premala", + "error.file.minwidth": "Širina slike mora biti najmanje {height} piksela", + "error.file.name.unique": "Naziv datoteke mora biti jedinstven", + "error.file.name.missing": "Naziv datoteke ne smije biti prazan", + "error.file.notFound": "Datoteka \"{filename}\" nije pronađena", + "error.file.orientation": "Orijentacija slike mora biti \"{orientation}\"", + "error.file.sort.permission": "Nemate dozvolu da promijenite sortiranje od \"{filename}\"", + "error.file.type.forbidden": "Nije dozvoljen upload {type} datoteka", + "error.file.type.invalid": "Nevažeći tip datoteke: {type}", + "error.file.undefined": "Datoteka nije pronađena", + + "error.form.incomplete": "Popravi sve greške na formi...", + "error.form.notSaved": "Forma se ne može spremiti", + + "error.language.code": "Unesi važeći kod za jezik", + "error.language.create.permission": "Nemate dozvolu da kreirate jezik", + "error.language.delete.permission": "Nemate dozvolu da obrišete jezik", + "error.language.duplicate": "Jezik već postoji", + "error.language.name": "Unesi važeći naziv za jezik", + "error.language.notFound": "Jezik nije pronađen", + "error.language.update.permission": "Nemate dozvolu da ažurirate jezik", + + "error.layout.validation.block": "Postoji greška kod \"{field}\" polja, u bloku {blockIndex}, pri korištenju bloka tipa \"{fieldset}\" u rasporedu {layoutIndex}", + "error.layout.validation.settings": "Postoji greška u postavkama rasporeda {index}", + + "error.license.domain": "Domena za licencu nedostaje", + "error.license.email": "Unesite važeću email adresu", + "error.license.format": "Unesite važeću licencu", + "error.license.verification": "Licenca se ne može verificirati", + + "error.login.totp.confirm.invalid": "Nevažeći kod", + "error.login.totp.confirm.missing": "Unesi trenutni kod", + + "error.object.validation": "Postoji greška u \"{label}\" polju:\n{message}", + + "error.offline": "Panel je trenutno offline", + + "error.page.changeSlug.permission": "Nemate dozvolu da promijenite URL nastavak za \"{slug}\"", + "error.page.changeSlug.reserved": "Putanja stranica najvišeg nivoa ne smije počinjati sa \"{path}\"", + "error.page.changeStatus.incomplete": "Stranica sadrži greške i ne može se objaviti", + "error.page.changeStatus.permission": "Status za ovu stranicu se ne može promijeniti", + "error.page.changeStatus.toDraft.invalid": "Stranica \"{slug}\" se ne može pretvoriti u skicu", + "error.page.changeTemplate.invalid": "Predložak za stranicu \"{slug}\" se ne može promijeniti", + "error.page.changeTemplate.permission": "Nemate dozvolu da promijenite predložak za \"{slug}\"", + "error.page.changeTitle.empty": "Naslov ne može biti prazan", + "error.page.changeTitle.permission": "Nemate dozvolu da promijenite naslov za \"{slug}\"", + "error.page.create.permission": "Nemate dozvolu da kreirate \"{slug}\"", + "error.page.delete": "Stranica \"{slug}\" se ne može obrisati", + "error.page.delete.confirm": "Unesite naslov stranice da potvrdite", + "error.page.delete.hasChildren": "Stranica sadrži podstranice i ne može se obrisati", + "error.page.delete.multiple": "Nije bilo moguće obrisati sve stranice. Pokušajte ih obrisati pojedinačno da bi vidjeli specifičnu grešku koja sprječava brisanje. ", + "error.page.delete.permission": "Nemate dozvolu da obrišete \"{slug}\"", + "error.page.draft.duplicate": "Skica stranice sa URL nastavkom \"{slug}\" već postoji", + "error.page.duplicate": "Stranica sa URL nastavkom \"{slug}\" već postoji", + "error.page.duplicate.permission": "Nemate dozvolu da duplicirate \"{slug}\"", + "error.page.move.ancestor": "Stranica se ne može premjestiti u samu sebe", + "error.page.move.directory": "Direktorij stranice se ne može premjestiti", + "error.page.move.duplicate": "Podstranica sa URL nastavkom \"{slug}\" već postoji", + "error.page.move.noSections": "Stranica \"{parent}\" ne može biti roditelj bilo koje podstranice jer ne sadrži sekciju \"pages\" u svom blueprintu", + "error.page.move.notFound": "Premještena stranica se ne može pronaći", + "error.page.move.permission": "Nemate dozvolu da premjestite \"{slug}\"", + "error.page.move.template": "Predložak \"{template}\" nije prihvaćen kao podstranica od \"{parent}\"", + "error.page.notFound": "Stranica \"{slug}\" nije pronađena", + "error.page.num.invalid": "Unesi važeći broj za sortiranje. Brojevi ne smiju biti negativni.", + "error.page.slug.invalid": "Unesi važeći URL prefiks", + "error.page.slug.maxlength": "Dužina URL nastavka mora biti manja od \"{length}\" znakova", + "error.page.sort.permission": "Stranica \"{slug}\" se ne može sortirati", + "error.page.status.invalid": "Odaberi važeći status stranice", + "error.page.undefined": "Stranica nije pronađena", + "error.page.update.permission": "Nemate dozvolu da uredite \"{slug}\"", + + "error.section.files.max.plural": "Nije moguće dodati više od {max} datoteka u \"{section}\" sekciju", + "error.section.files.max.singular": "Nije moguće dodati više od jedne datoteke u \"{section}\" sekciju", + "error.section.files.min.plural": "Sekcija \"{section}\" zahtjeva najmanje {min} datoteka", + "error.section.files.min.singular": "Sekcija \"{section}\" zahtjeva najmanje jednu datoteku", + + "error.section.pages.max.plural": "Nije moguće dodati više od {max} stranica u \"{section}\" sekciju", + "error.section.pages.max.singular": "Nije moguće dodati više od jedne stranice \"{section}\" sekciju", + "error.section.pages.min.plural": "Sekcija \"{section}\" zahtjeva najmanje {min} stranica", + "error.section.pages.min.singular": "Sekcija \"{section}\" zahtjeva najmanje jednu stranicu", + + "error.section.notLoaded": "Sekcija \"{name}\" se nije mogla učitati", + "error.section.type.invalid": "Tip sekcije \"{type}\" nije važeći", + + "error.site.changeTitle.empty": "The title must not be empty", + "error.site.changeTitle.permission": "Nemate dozvolu da promijenite naslov stranice", + "error.site.update.permission": "Nemate dozvolu da uredite stranicu", + + "error.structure.validation": "Postoji greška na \"{field}\" polju u redu {index}", + + "error.template.default.notFound": "Default predložak ne postoji", + + "error.unexpected": "Dogodila se neočekivana greška! Omogućite debug modus za više informacija: https://getkirby.com/docs/reference/system/options/debug", + + "error.user.changeEmail.permission": "Nemate dozvolu da promijenite email adresu korisnika \"{name}\"", + "error.user.changeLanguage.permission": "Nemate dozvolu da promijenite jezik korisnika \"{name}\"", + "error.user.changeName.permission": "Nemate dozvolu da promijenite ime korisnika \"{name}\"", + "error.user.changePassword.permission": "Nemate dozvolu da promijenite šifru korisnika \"{name}\"", + "error.user.changeRole.lastAdmin": "Uloga zadnjeg administratora se ne može promijeniti", + "error.user.changeRole.permission": "Nemate dozvolu da promijenite ulogu korisnika \"{name}\"", + "error.user.changeRole.toAdmin": "Nemate dozvolu da promijenite ulogu nekog korisnika u administratora", + "error.user.create.permission": "Nemate dozvolu da kreirate ovog korisnika", + "error.user.delete": "Korisnik \"{name}\" se ne može obrisati", + "error.user.delete.lastAdmin": "Zadnji administrator se ne može obrisati", + "error.user.delete.lastUser": "Zadnji korisnik se ne može obrisati", + "error.user.delete.permission": "Nemate dozvolu da obrišete korisnika \"{name}\"", + "error.user.duplicate": "Korisnik sa email adresom \"{email}\" već postoji", + "error.user.email.invalid": "Unesite važeću email adresu", + "error.user.language.invalid": "Unesi važeći jezik", + "error.user.notFound": "Korisnik \"{name}\" nije pronađen", + "error.user.password.excessive": "Unesite važeću šifru. Šifre ne smiju biti duže od 1000 znakova", + "error.user.password.invalid": "Unesi važeću šifru. Šifre moraju sadržavati najmanje 8 znakova.", + "error.user.password.notSame": "Šifre se ne podudaraju", + "error.user.password.undefined": "Korisnik nema šifru", + "error.user.password.wrong": "Kriva šifra", + "error.user.role.invalid": "Uloga je nevažeća", + "error.user.undefined": "Nije moguće pronaći korisnika", + "error.user.update.permission": "Nemate dozvolu da uredite korisnika \"{name}\"", + + "error.validation.accepted": "Potvrdi", + "error.validation.alpha": "Koristi samo znakove u rasponu a-z", + "error.validation.alphanum": "Koristi samo znakove u rasponu a-z ili brojeve 0-9", + "error.validation.anchor": "Unesite ispravan anker linka", + "error.validation.between": "Unesi vrijednost između \"{min}\" i \"{max}\"", + "error.validation.boolean": "Potvrdi ili otkaži", + "error.validation.color": "Unesite važeću boju u {format} formatu", + "error.validation.contains": "Unesi vrijednost koja sadrži \"{needle}\"", + "error.validation.date": "Unesi važeći datum", + "error.validation.date.after": "Unesi datum nakon {date}", + "error.validation.date.before": "Unesi datum prije {date}", + "error.validation.date.between": "Unesi datum između {min} i {max}", + "error.validation.denied": "Otkaži", + "error.validation.different": "Vrijednost ne može biti \"{other}\"", + "error.validation.email": "Unesite važeću email adresu", + "error.validation.endswith": "Vrijednost mora završavati sa \"{end}\"", + "error.validation.filename": "Unesi važeći naziv datoteke", + "error.validation.in": "Unesi jedno od slijedećeg: ({in})", + "error.validation.integer": "Unesi važeći cijeli broj", + "error.validation.ip": "Unesi važeću IP adresu", + "error.validation.less": "Unesi vrijednost manju od {max}", + "error.validation.linkType": "Tip linka nije dozvoljen", + "error.validation.match": "Vrijednost ne odgovara očekivanom uzorku", + "error.validation.max": "Unesi vrijednost jednaku ili manju od {max}", + "error.validation.maxlength": "Unesi kraću vrijednost. (max. {max} znakova)", + "error.validation.maxwords": "Unesi najviše {max} riječ(i)", + "error.validation.min": "Unesi vrijednost jednaku ili veću od {min}", + "error.validation.minlength": "Unesi dužu vrijednost. (min. {min} znakova)", + "error.validation.minwords": "Unesi najmanje {min} riječ(i)", + "error.validation.more": "Unesi veću vrijednost od {min}", + "error.validation.notcontains": "Unesi vrijednost koja NE sadrži \"{needle}\"", + "error.validation.notin": "Nemojte unositi bilo šta od slijedećeg: ({notIn})", + "error.validation.option": "Odaberite važeću opciju", + "error.validation.num": "Odaberite važeći broj", + "error.validation.required": "Unesi nešto", + "error.validation.same": "Unesi \"{other}\"", + "error.validation.size": "Dužina unosa mora biti \"{size}\"", + "error.validation.startswith": "Unos mora počinjati sa \"{start}\"", + "error.validation.tel": "Unesite neformatirani broj telefona", + "error.validation.time": "Unesi važeće vrijeme", + "error.validation.time.after": "Unesite vrijeme poslije {time}", + "error.validation.time.before": "Unesite vrijeme prije {time}", + "error.validation.time.between": "Unesite vrijeme između {min} i {max}", + "error.validation.uuid": "Unesite važeći UUID", + "error.validation.url": "Unesi važeći URL", + + "expand": "Proširi", + "expand.all": "Proširi sve", + + "field.invalid": "Polje je nevažeće", + "field.required": "Polje je obavezno", + "field.blocks.changeType": "Promijena tipa", + "field.blocks.code.name": "Kod", + "field.blocks.code.language": "Jezik", + "field.blocks.code.placeholder": "Vaš kod ...", + "field.blocks.delete.confirm": "Da li stvarno želite obrisati ovaj blok?", + "field.blocks.delete.confirm.all": "Da li stvarno želite obrisati sve blokove?", + "field.blocks.delete.confirm.selected": "Da li stvarno želite obrisati odabrane blokove?", + "field.blocks.empty": "Još nema blokova", + "field.blocks.fieldsets.empty": "Još nema skupova polja", + "field.blocks.fieldsets.label": "Odaberite tip bloka ...", + "field.blocks.fieldsets.paste": "Pritisnite {{ shortcut }} da uvezete rasporede/blokove iz vašeg međuspremnika.Samo oni dozvoljeni u trenutnom polju će biti umetnuti.", + "field.blocks.gallery.name": "Galerija", + "field.blocks.gallery.images.empty": "Još nema slika", + "field.blocks.gallery.images.label": "Slike", + "field.blocks.heading.level": "Nivo", + "field.blocks.heading.name": "Naslov", + "field.blocks.heading.text": "Tekst", + "field.blocks.heading.placeholder": "Naslov ...", + "field.blocks.figure.back.plain": "Obično", + "field.blocks.figure.back.pattern.light": "Uzorak (svijetlo)", + "field.blocks.figure.back.pattern.dark": "Uzorak (tamno)", + "field.blocks.image.alt": "Alternativni tekst", + "field.blocks.image.caption": "Natpis", + "field.blocks.image.crop": "Odreži", + "field.blocks.image.link": "Link", + "field.blocks.image.location": "Lokacija", + "field.blocks.image.location.internal": "Ova web stranica", + "field.blocks.image.location.external": "Eksterni izvor", + "field.blocks.image.name": "Slika", + "field.blocks.image.placeholder": "Odaberi sliku", + "field.blocks.image.ratio": "Omjer", + "field.blocks.image.url": "URL slike", + "field.blocks.line.name": "Linija", + "field.blocks.list.name": "Lista", + "field.blocks.markdown.name": "Markdown", + "field.blocks.markdown.label": "Tekst", + "field.blocks.markdown.placeholder": "Markdown ...", + "field.blocks.quote.name": "Citat", + "field.blocks.quote.text.label": "Tekst", + "field.blocks.quote.text.placeholder": "Citat ...", + "field.blocks.quote.citation.label": "Citiranje", + "field.blocks.quote.citation.placeholder": "po ...", + "field.blocks.text.name": "Tekst", + "field.blocks.text.placeholder": "Tekst ...", + "field.blocks.video.autoplay": "Automatski reproduciraj", + "field.blocks.video.caption": "Natpis", + "field.blocks.video.controls": "Kontrole", + "field.blocks.video.location": "Lokacija", + "field.blocks.video.loop": "Ponavljaj", + "field.blocks.video.muted": "Utišano", + "field.blocks.video.name": "Video", + "field.blocks.video.placeholder": "Unesi video URL", + "field.blocks.video.poster": "Poster", + "field.blocks.video.preload": "Predučitavanje", + "field.blocks.video.url.label": "Video-URL", + "field.blocks.video.url.placeholder": "https://youtube.com/?v=", + + "field.entries.delete.confirm.all": "Da li stvarno želite obrisati sve unose?", + "field.entries.empty": "Još nema unosa", + + "field.files.empty": "Niti jedna datoteka još nije odabrana", + "field.files.empty.single": "Datoteka još nije odabrana", + + "field.layout.change": "Promijeni raspored", + "field.layout.delete": "Obriši raspored", + "field.layout.delete.confirm": "Da li stvarno želite obrisati ovaj raspored?", + "field.layout.delete.confirm.all": "Da li stvarno želite obrisati sve rasporede?", + "field.layout.empty": "Još nema redova", + "field.layout.select": "Odaberi raspored", + + "field.object.empty": "Još nema informacija", + + "field.pages.empty": "Niti jedna stranica još nije odabrana", + "field.pages.empty.single": "Stranica još nije odabrana", + + "field.structure.delete.confirm": "Da li stvarno želite obrisati ovaj red?", + "field.structure.delete.confirm.all": "Da li stvarno želite obrisati sve unose?", + "field.structure.empty": "Još nema unosa", + + "field.users.empty": "Niti jedan korisnik još nije odabran", + "field.users.empty.single": "Korisnik još nije odabran", + + "fields.empty": "Još nema polja", + + "file": "Datoteka", + "file.blueprint": "Ovaj fajl još uvijek nema blueprint. Možete definirati postavke u /site/blueprints/files/{blueprint}.yml", + "file.changeTemplate": "Promijeni predložak", + "file.changeTemplate.notice": "Promjena predloška datoteke će ukloniti sadržaj za polja koja se ne podudaraju po tipu. Ako novi predložak definira određena pravila, npr. dimenzije slike, ona će se također nepovratno primijeniti. Koristite s oprezom.", + "file.delete.confirm": "Da li stvarno želite obrisati
{filename}?", + "file.focus.placeholder": "Postavi fokalnu tačku", + "file.focus.reset": "Ukloni fokalnu tačku", + "file.focus.title": "Fokus", + "file.sort": "Promijeni poziciju", + + "files": "Datoteke", + "files.delete.confirm.selected": "Da li stvarno želite da obrišete odabrane datoteke? Ova akcija se ne može poništiti.", + "files.empty": "Još nema datoteka...", + + "filter": "Filter", + + "form.discard": "Odbaci promjene", + "form.discard.confirm": "Da li stvarno želite odbaciti sve promjene?", + "form.locked": "Ovaj sadržaj je vama onemogućen jer ga trenutno uređuje drugi korisnik", + "form.unsaved": "Trenutne promjene još uvijek nisu spremljene", + "form.preview": "Pregledaj izmjene", + "form.preview.draft": "Pregledaj skicu", + + "hide": "Sakrij", + "hour": "Sat", + "hue": "Nijansa", + "import": "Uvoz", + "info": "Info", + "insert": "Umetni", + "insert.after": "Umetni nakon", + "insert.before": "Umetni prije", + "install": "Instaliraj", + + "installation": "Instalacija", + "installation.completed": "Panel je instaliran", + "installation.disabled": "Instaler za panel je onemogućen na javnim serverima po defaultu. Pokreni instaler na lokalnom okruženju ili omogući sa panel.install opcijom.", + "installation.issues.accounts": "Folder /site/accounts ne postoji ili nema dozvolu pisanja", + "installation.issues.content": "Folder /content ne postoji ili nema dozvolu pisanja", + "installation.issues.curl": "Ekstenzija CURL je neophodna", + "installation.issues.headline": "Panel se ne može instalirati", + "installation.issues.mbstring": "Ekstenzija MB String je neophodna", + "installation.issues.media": "Folder /media ne postoji ili nema dozvolu pisanja", + "installation.issues.php": "Obavezno koristite PHP 7+", + "installation.issues.sessions": "Folder /site/sessions ne postoji ili nema dozvolu pisanja", + + "language": "Jezik", + "language.code": "Kod", + "language.convert": "Postavi kao zadani", + "language.convert.confirm": "

Da li stvarno želite konvertirati {name} u zadani jezik? Ova akcija se ne može poništiti.

Ukoliko {name} sadrži dijelove bez prijevoda, neće postojati važeći fallback što može prouzrokovati prazne dijelove na ovoj stranici.

", + "language.create": "Dodaj novi jezik", + "language.default": "Zadani jezik", + "language.delete.confirm": "Da li stvarno želite obrisati jezik {name} including all translations? This cannot be undone!", + "language.deleted": "Jezik je obrisan", + "language.direction": "Smjer čitanja", + "language.direction.ltr": "Sa lijeva na desno", + "language.direction.rtl": "Sa desna na lijevo", + "language.locale": "PHP lokalizacijski string", + "language.locale.warning": "Sistem koristi prilagođenu lokalizaciju. Promijeni postavke u jezičnoj datoteci u /site/languages", + "language.name": "Naziv", + "language.secondary": "Sekundarni jezik", + "language.settings": "Postavke jezika", + "language.updated": "Jezik je izmijenjen", + "language.variables": "Jezične varijable", + "language.variables.empty": "Još nema prijevoda", + + "language.variable.delete.confirm": "Da li stvarno želite da obrišete varijablu za {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", + "language.variable.key": "Ključ", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", + "language.variable.notFound": "Varijablu nije moguće pronaći", + "language.variable.value": "Vrijednost", + + "languages": "Jezici", + "languages.default": "Zadani jezik", + "languages.empty": "Jezici još nisu definirani", + "languages.secondary": "Sekundarni jezici", + "languages.secondary.empty": "Sekundarni jezici još nisu definirani", + + "license": "Licenca", + "license.activate": "Aktivirajte odmah", + "license.activate.label": "Aktivirajte vašu licencu", + "license.activate.domain": "Vaša licenca će biti aktivirana za {host}.", + "license.activate.local": "Upravo ćete aktivirati svoju Kirby licencu za vašu lokalnu domenu {host}. Ako će ova stranica biti postavljena na javnu domenu, molimo vas da je tamo aktivirate. Ako je {host} domena za koju želite koristiti svoju licencu, molimo vas da nastavite.", + "license.activated": "Aktivirano", + "license.buy": "Kupite licencu", + "license.code": "Kod", + "license.code.help": "Primili ste vašu licencu nakon kupovine putem e-maila. Molimo da je kopirate i zalijepite ovdje.", + "license.code.label": "Unesite vašu licencu", + "license.status.active.info": "Uključuje nove glavne verzije do {date}", + "license.status.active.label": "Važeća licenca", + "license.status.demo.info": "Ovo je demo instalacija", + "license.status.demo.label": "Demo", + "license.status.inactive.info": "Obnovi licencu da bi se ažuriralo na nove glavne verzije", + "license.status.inactive.label": "Nema novih glavnih verzija", + "license.status.legacy.bubble": "Spremni da obnovite vašu licencu?", + "license.status.legacy.info": "Vaša licenca ne pokriva ovu verziju", + "license.status.legacy.label": "Obnovite vašu licencu", + "license.status.missing.bubble": "Spremni da objavite vašu stranicu?", + "license.status.missing.info": "Ne postoji važeća licenca", + "license.status.missing.label": "Aktivirajte vašu licencu", + "license.status.unknown.info": "Status licence je nepoznat", + "license.status.unknown.label": "Nepoznato", + "license.manage": "Upravljanje vašim licencama", + "license.purchased": "Kupljeno", + "license.success": "Hvala što podržavate Kirby", + "license.unregistered.label": "Neregistrovano", + + "link": "Link", + "link.text": "Tekst linka", + + "loading": "Učitavanje", + + "lock.unsaved": "Izmjene nisu spremljene", + "lock.unsaved.empty": "Ne postoje druge izmjene za spremanje", + "lock.unsaved.files": "Nespremljene datoteke", + "lock.unsaved.pages": "Nespremljene stranice", + "lock.unsaved.users": "Nespremljeni računi", + "lock.isLocked": "Izmjene od strane {email}", + "lock.unlock": "Otključaj", + "lock.unlock.submit": "Otključaj i prepiši preko nespremljenih promjena od {email}", + "lock.isUnlocked": "Vaše izmjene su zamijenjene sa izmjenama drugog korisnika. Dostupne su za download, te ih možete spojiti manuelno.", + + "login": "Prijava", + "login.code.label.login": "Kod za prijavu", + "login.code.label.password-reset": "Kod za resetiranje šifre", + "login.code.placeholder.email": "000 000", + "login.code.placeholder.totp": "000000", + "login.code.text.email": "Ako je vaša e-mail adresa registrirana, traženi kod je poslan putem e-maila.", + "login.code.text.totp": "Unesite jednokratni kod iz vaše autentifikacijske aplikacije.", + "login.email.login.body": "Zdravo {user.nameOrEmail},\n\nNedavno ste zatražili kod za prijavu na Panel stranice {site}.\nSljedeći kod za prijavu važiće {timeout} minuta:\n\n{code}\n\nAko niste zatražili kod za prijavu, molimo vas da zanemarite ovaj e-mail ili kontaktirate svog administratora ako imate pitanja.\nIz sigurnosnih razloga, molimo vas da NE prosljeđujete ovaj e-mail.", + "login.email.login.subject": "Vaš kod za prijavu", + "login.email.password-reset.body": "Zdravo {user.nameOrEmail},\n\nNedavno ste zatražili kod za resetiranje šifre za Panel stranice {site}.\nSljedeći kod za resetiranje šifre važiće {timeout} minuta:\n\n{code}\n\nAko niste zatražili kod za resetiranje šifre, molimo vas da zanemarite ovaj e-mail ili kontaktirate svog administratora ako imate pitanja.\nIz sigurnosnih razloga, molimo vas da NE prosljeđujete ovaj e-mail.", + "login.email.password-reset.subject": "Kod za resetiranje šifre", + "login.remember": "Zapamti moju prijavu", + "login.reset": "Resetiraj šifru", + "login.toggleText.code.email": "Prijava putem emaila", + "login.toggleText.code.email-password": "Prijava sa šifrom", + "login.toggleText.password-reset.email": "Zaboravljena šifra?", + "login.toggleText.password-reset.email-password": "← Nazad na login", + "login.totp.enable.option": "Postavite jednokratne kodove", + "login.totp.enable.intro": "Autentifikacijske aplikacije mogu generirati jednokratne kodove koji se koriste kao drugi faktor prilikom prijavljivanja u vaš račun.", + "login.totp.enable.qr.label": "1. Skeniraj ovaj QR kod", + "login.totp.enable.qr.help": "Skeniranje nije moguće? Dodaj ključ za postavljanje {secret} ručno u aplikaciju za autentifikaciju.", + "login.totp.enable.confirm.headline": "2. Potvrdi sa generisanim kodom", + "login.totp.enable.confirm.text": "Vaša aplikacija generira novi jednokratni kod svakih 30 sekundi. Unesite trenutni kod da završite postavljanje:", + "login.totp.enable.confirm.label": "Trenutni kod", + "login.totp.enable.confirm.help": "Nakon ovih postavki, tražićemo od vas jednokratni kod prilikom svakog prijavljivanja.", + "login.totp.enable.success": "Jednokratni kodovi omogućeni", + "login.totp.disable.option": "Onemogući jednokratne kodove", + "login.totp.disable.label": "Unesite vaš password da bi onemogućili jednokratne kodove", + "login.totp.disable.help": "Ubuduće, drugačiji drugi faktor poput koda za prijavu dostavljenog putem e-maila će biti zatražen prilikom slijedeće prijave. Uvijek ponovo možete postaviti jednokratne kodove kasnije.", + "login.totp.disable.admin": "

Ovo će onemogućiti jednokratne kodove za {user}.

Ubuduće, drugačiji drugi faktor poput koda za prijavu dostavljenog putem e-maila će biti zatražen prilikom prijave. {user} može postaviti jednokratne kodove nakon njihove slijedeće prijave.

", + "login.totp.disable.success": "Jednokratni kodovi onemogućeni", + + "logout": "Odjava", + + "merge": "Spoji", + "menu": "Izbornik", + "meridiem": "AM/PM", + "mime": "Tip medija", + "minutes": "Minute", + + "month": "Mjesec", + "months.april": "April", + "months.august": "August", + "months.december": "Decembar", + "months.february": "Feburar", + "months.january": "Januar", + "months.july": "Juli", + "months.june": "Juni", + "months.march": "Mart", + "months.may": "Maj", + "months.november": "Novembar", + "months.october": "Oktobar", + "months.september": "Septembar", + + "more": "Više", + "move": "Pomjeri", + "name": "Ime", + "next": "Dalje", + "night": "Noć", + "no": "ne", + "off": "off", + "on": "on", + "open": "Otvori", + "open.newWindow": "Otvori u novom prozoru", + "option": "Opcija", + "options": "Opcije", + "options.none": "Nema opcija", + "options.all": "Prikaži svih {count} options", + + "orientation": "Orijentacija", + "orientation.landscape": "Pejzaž", + "orientation.portrait": "Portret", + "orientation.square": "Kvadrat", + + "page": "Strana", + "page.blueprint": "Ova stranica još uvijek nema blueprint. Možete definirati postavke u /site/blueprints/pages/{blueprint}.yml", + "page.changeSlug": "Promijeni URL", + "page.changeSlug.fromTitle": "Kreiraj iz naslova", + "page.changeStatus": "Promijeni status", + "page.changeStatus.position": "Odaberi poziciju", + "page.changeStatus.select": "Odaberi novi status", + "page.changeTemplate": "Promijeni predložak", + "page.changeTemplate.notice": "Promjena predloška stranice će ukloniti sadržaj za polja koja se ne podudaraju po tipu. Koristite s oprezom.", + "page.create": "Kreiraj kao {status}", + "page.delete.confirm": "Da li stvarno želite obrisati {title}?", + "page.delete.confirm.subpages": "Ova stranica ima podstranice.
Sve podstranice će također biti obrisane.", + "page.delete.confirm.title": "Napiši naslov stranice kao potvrdu ove akcije", + "page.duplicate.appendix": "Kopiraj", + "page.duplicate.files": "Kopiraj datoteke", + "page.duplicate.pages": "Kopiraj stranice", + "page.move": "Premjesti stranicu", + "page.sort": "Promijeni poziciju", + "page.status": "Status", + "page.status.draft": "Skica", + "page.status.draft.description": "Stranica je u izradi, te je vidljiva jedino prijavljenim urednicima", + "page.status.listed": "Javno", + "page.status.listed.description": "Stranica je javno dostupna", + "page.status.unlisted": "Neizlistano", + "page.status.unlisted.description": "Stranica je dostupna putem direktnog URL-a", + + "pages": "Stranice", + "pages.delete.confirm.selected": "Da li stvarno želite da obrišete odabrane stranice? Ova akcija se ne može poništiti.", + "pages.empty": "Još nema stranica...", + "pages.status.draft": "Skica", + "pages.status.listed": "Javno", + "pages.status.unlisted": "Neizlistano", + + "pagination.page": "Strana", + + "password": "Šifra", + "paste": "Zalijepi", + "paste.after": "Zalijepi nakon", + "paste.success": "{count} zalijepljeno!", + "pixel": "Piksel", + "plugin": "Plugin", + "plugins": "Plugini", + "prev": "Previous", + "preview": "Pregled", + + "publish": "Objavi", + "published": "Javno", + + "remove": "Remove", + "rename": "Preimenuj", + "renew": "Obnovi", + "replace": "Zamijeni", + "replace.with": "Zamijeni sa", + "retry": "Pokušaj ponovo", + "revert": "Revert", + "revert.confirm": "Da li stvarno želite obrisati sve nespremljene promjene?", + + "role": "Uloga", + "role.admin.description": "Administrator ima sva prava", + "role.admin.title": "Administrator", + "role.all": "Sve", + "role.empty": "Za ovu ulogu ne postoje korisnici", + "role.description.placeholder": "Bez opisa", + "role.nobody.description": "Ovo je pomoćna uloga bez ikakvih prava", + "role.nobody.title": "Niko", + + "save": "Spremi", + "saved": "Spremljeno", + "search": "Traži", + "searching": "Traženje", + "search.min": "Unesi {min} znakova za pretraživanje", + "search.all": "Prikaži svih {count} rezultata", + "search.results.none": "Nema rezultata", + + "section.invalid": "Ova sekcija je nevažeća", + "section.required": "Ova sekcija je potrebna", + + "security": "Sigurnost", + "select": "Odaberi", + "server": "Server", + "settings": "Postavke", + "show": "Prikaži", + "site.blueprint": "Stranica još uvijek nema blueprint. Možete definirati postavke u /site/blueprints/site.yml", + "size": "Veličina", + "slug": "URL nastavak", + "sort": "Sortiranje", + "sort.drag": "Prevuci za sortiranje ...", + "split": "Podijeli", + + "stats.empty": "Nema izvještaja", + "status": "Status", + + "system.info.copy": "Kopiraj info", + "system.info.copied": "Sistemske info kopirane", + "system.issues.content": "Čini se da je content folder izložen", + "system.issues.eol.kirby": "Vaša instalirana Kirby verzija je dostigla end-of-life i neće primati daljnja sigurnosna ažuriranja", + "system.issues.eol.plugin": "Vaša instalirana verzija plugina { plugin } je dostigla end-of-life i neće primati daljnja sigurnosna ažuriranja", + "system.issues.eol.php": "Vaša instalirana PHP verzija { release } je dostigla end-of-life i neće primati daljnja sigurnosna ažuriranja", + "system.issues.debug": "Debugiranje se mora isključiti u produkciji", + "system.issues.git": "Čini se da je .git folder izložen", + "system.issues.https": "Preporučujemo HTTPS za sve vaše stranice", + "system.issues.kirby": "Čini se da je kirby folder izložen", + "system.issues.local": "Stranica radi lokalno uz opuštene signurnosne provjere", + "system.issues.site": "Čini se da je site folder izložen", + "system.issues.vue.compiler": "Vue template compiler je omogućen", + "system.issues.vulnerability.kirby": "Vaša instalacija je možda pogođena slijedećim sigurnosnim propustom ({ severity } stepen): { description }", + "system.issues.vulnerability.plugin": "Vaša instalacija je možda pogođena slijedećim sigurnosnim propustom u pluginu {plugin} ({ severity } stepen): { description }", + "system.updateStatus": "Ažuriraj status", + "system.updateStatus.error": "Nije moguće provjeriti za ažuriranja", + "system.updateStatus.not-vulnerable": "Nema poznatih sigurnosnih propusta", + "system.updateStatus.security-update": "Besplatno sigurnosno ažiriranje { version } dostupno", + "system.updateStatus.security-upgrade": "Nadogradnja { version } sa sigurnosnim popravkama dostupna", + "system.updateStatus.unreleased": "Neobjavljena verzija", + "system.updateStatus.up-to-date": "Ažurirano", + "system.updateStatus.update": "Besplatno ažuriranje { version } dostupno", + "system.updateStatus.upgrade": "Nadogradnja { version } dostupna", + + "tel": "Telefon", + "tel.placeholder": "+38761222333", + "template": "Predložak", + + "theme": "Tema", + "theme.light": "Svjetla upaljena", + "theme.dark": "Svjetla ugašena", + "theme.automatic": "Uskladi sa sistemskim postavkama", + + "title": "Naslov", + "today": "Danas", + + "toolbar.button.clear": "Očisti formatiranje", + "toolbar.button.code": "Kod", + "toolbar.button.bold": "Podebljano", + "toolbar.button.email": "Email", + "toolbar.button.headings": "Naslovi", + "toolbar.button.heading.1": "Naslov 1", + "toolbar.button.heading.2": "Naslov 2", + "toolbar.button.heading.3": "Naslov 3", + "toolbar.button.heading.4": "Naslov 4", + "toolbar.button.heading.5": "Naslov 5", + "toolbar.button.heading.6": "Naslov 6", + "toolbar.button.italic": "Kurziv", + "toolbar.button.file": "Datoteka", + "toolbar.button.file.select": "Odaberi datoteku", + "toolbar.button.file.upload": "Uploadaj datoteku", + "toolbar.button.link": "Link", + "toolbar.button.paragraph": "Paragraf", + "toolbar.button.strike": "Precrtano", + "toolbar.button.sub": "Podpis", + "toolbar.button.sup": "Nadpis", + "toolbar.button.ol": "Uređena list", + "toolbar.button.underline": "Podvučeno", + "toolbar.button.ul": "Označena lista", + + "translation.author": "Faris Mujakić", + "translation.direction": "ltr", + "translation.name": "Bosanski", + "translation.locale": "bs_BA", + + "type": "Tip", + + "upload": "Uploadaj", + "upload.error.cantMove": "Uploadana datoteka se ne može premjestiti", + "upload.error.cantWrite": "Greška prilikom pisanja datoteke na disk", + "upload.error.default": "Datoteka se ne može uploadati", + "upload.error.extension": "Upload zaustavljen od strane ekstenzije", + "upload.error.formSize": "Uploadana datoteka premašuje MAX_FILE_SIZE direktivu navedenu u formi", + "upload.error.iniPostSize": "Uploadana datoteka premašuje post_max_size direktivu u php.ini", + "upload.error.iniSize": "Uploadana datoteka premašuje upload_max_filesize direktivu u php.ini", + "upload.error.noFile": "Datoteka nije uploadana", + "upload.error.noFiles": "Datoteke nisu uploadane", + "upload.error.partial": "Datoteka je djelimično uploadana", + "upload.error.tmpDir": "Nedostaje privremeni folder", + "upload.errors": "Greška", + "upload.progress": "Slanje...", + + "url": "Url", + "url.placeholder": "https://example.com", + + "user": "Korisnik", + "user.blueprint": "Možete definirati dodatne sekcije i polja forme za ovu ulogu korisnika u /site/blueprints/users/{role}.yml", + "user.changeEmail": "Promijeni email", + "user.changeLanguage": "Promijeni jezik", + "user.changeName": "Preimenuj ovog korisnika", + "user.changePassword": "Promijeni šifru", + "user.changePassword.current": "Trenutna šifra", + "user.changePassword.new": "Nova šifra", + "user.changePassword.new.confirm": "Potvrdi novu šifru...", + "user.changeRole": "Promijeni ulogu", + "user.changeRole.select": "Odaberi novu ulogu", + "user.create": "Dodaj novog korisnika", + "user.delete": "Obriši ovog korisnika", + "user.delete.confirm": "Da li stvarno želite obrisati
{email}?", + + "users": "Korisnici", + + "version": "Verzija", + "version.changes": "Promijenjena verzija", + "version.compare": "Uporedi verzije", + "version.current": "Trenutna verzija", + "version.latest": "Zadnja verzija", + "versionInformation": "Informacije o verziji", + + "view": "Pregled", + "view.account": "Tvoj račun", + "view.installation": "Instalacija", + "view.languages": "Jezici", + "view.resetPassword": "Resetiraj šifru", + "view.site": "Stranica", + "view.system": "Sistem", + "view.users": "Korisnici", + + "welcome": "Dobrodošli", + "year": "Godina", + "yes": "da" +} diff --git a/kirby/i18n/translations/ca.json b/kirby/i18n/translations/ca.json index 6a0a49a..bd43a3c 100644 --- a/kirby/i18n/translations/ca.json +++ b/kirby/i18n/translations/ca.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/cs.json b/kirby/i18n/translations/cs.json index 99746d8..0d9bc10 100644 --- a/kirby/i18n/translations/cs.json +++ b/kirby/i18n/translations/cs.json @@ -449,7 +449,12 @@ "language.variables.empty": "Zatím žádné překlady", "language.variable.delete.confirm": "Doopravdy chcete smazat proměnou {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Klíč", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "Proměnná nebyla nalezena", "language.variable.value": "Hodnota", diff --git a/kirby/i18n/translations/da.json b/kirby/i18n/translations/da.json index 8c05064..d6d97c3 100644 --- a/kirby/i18n/translations/da.json +++ b/kirby/i18n/translations/da.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/de.json b/kirby/i18n/translations/de.json index f5f19ba..56aa459 100644 --- a/kirby/i18n/translations/de.json +++ b/kirby/i18n/translations/de.json @@ -307,7 +307,7 @@ "field.blocks.delete.confirm.all": "Willst du wirklich alle Blöcke löschen?", "field.blocks.delete.confirm.selected": "Willst du wirklich die ausgewählten Blöcke löschen?", "field.blocks.empty": "Keine Blöcke", - "field.blocks.fieldsets.empty": "Keine Block Definition", + "field.blocks.fieldsets.empty": "Keine Blockdefinitionen", "field.blocks.fieldsets.label": "Bitte wähle einen Blocktyp aus …", "field.blocks.fieldsets.paste": "Drücke {{ shortcut }} um Layouts/Blocks von deinem Clipboard zu importieren. Nur die, die im aktuellen Feld erlaubt sind werden eingefügt.", "field.blocks.gallery.name": "Galerie", @@ -357,7 +357,7 @@ "field.blocks.video.url.placeholder": "https://youtube.com/?v=", "field.entries.delete.confirm.all": "Möchtest du wirklich alle Einträge löschen?", - "field.entries.empty": "Es bestehen keine Einträge.", + "field.entries.empty": "Keine Einträge", "field.files.empty": "Keine Dateien ausgewählt", "field.files.empty.single": "Keine Dateien ausgewählt", @@ -449,7 +449,12 @@ "language.variables.empty": "Keine Übersetzung", "language.variable.delete.confirm": "Willst du wirklich die Variable \"{key}\" entfernen?", + "language.variable.entries": "Werte", + "language.variable.entries.help": "Jeder Eintrag wird für die entsprechende Anzahl verwendet, z. B. werden drei Einträge in der Reihenfolge mit den Anzahlen 0, 1, 2 und mehr übereinstimmen. Verwende den Platzhalter {count}, um die tatsächliche Anzahl einzufügen.", "language.variable.key": "Schlüssel", + "language.variable.multiple": "Zählbar?", + "language.variable.multiple.text": "Benutze unterschiedliche Übersetzungen, abhängig von der Anzahl", + "language.variable.multiple.help": "Du kannst verschiedene Werte anlegen, die von einer Anzahl abhängen. Diese übergibst du zusammen mit der Sprachvariablen. So kannst du dynamische Übersetzungen erstellen, zum Beispiel für Singular und Plural.", "language.variable.notFound": "Die Variable konnte nicht gefunden werden", "language.variable.value": "Wert", diff --git a/kirby/i18n/translations/el.json b/kirby/i18n/translations/el.json index 1679c6d..9659dbc 100644 --- a/kirby/i18n/translations/el.json +++ b/kirby/i18n/translations/el.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/en.json b/kirby/i18n/translations/en.json index f556c6f..7efbc30 100644 --- a/kirby/i18n/translations/en.json +++ b/kirby/i18n/translations/en.json @@ -20,7 +20,9 @@ "coordinates": "Coordinates", "copy": "Copy", "copy.all": "Copy all", - "copy.success": "{count} copied!", + "copy.success": "Copied", + "copy.success.multiple": "{count} copied!", + "copy.url": "Copy URL", "create": "Create", "custom": "Custom", @@ -90,6 +92,19 @@ "error.cache.type.invalid": "Invalid cache type \"{type}\"", + "error.content.lock.delete": "The version is locked and cannot be deleted", + "error.content.lock.move": "The source version is locked and cannot be moved", + "error.content.lock.publish": "This version is already published", + "error.content.lock.replace": "The version is locked and cannot be replaced", + "error.content.lock.update": "The version is locked and cannot be updated", + + "error.entries.max.plural": "You must not add more than {max} entries", + "error.entries.max.singular": "You must not add more than one entry", + "error.entries.min.plural": "You must add at least {min} entries", + "error.entries.min.singular": "You must add at least one entry", + "error.entries.supports": "\"{type}\" field type is not supported for the entries field", + "error.entries.validation": "There's an error on the \"{field}\" field in row {index}", + "error.email.preset.notFound": "The email preset \"{name}\" cannot be found", "error.field.converter.invalid": "Invalid converter \"{converter}\"", @@ -101,6 +116,7 @@ "error.file.changeTemplate.invalid": "The template for the file \"{id}\" cannot be changed to \"{template}\" (valid: \"{blueprints}\")", "error.file.changeTemplate.permission": "You are not allowed to change the template for the file \"{id}\"", + "error.file.delete.multiple": "Not all files could be deleted. Try each remaining file individually to see the specific error that prevents deletion.", "error.file.duplicate": "A file with the name \"{filename}\" already exists", "error.file.extension.forbidden": "The extension \"{extension}\" is not allowed", "error.file.extension.invalid": "Invalid extension: {extension}", @@ -119,6 +135,7 @@ "error.file.name.missing": "The filename must not be empty", "error.file.notFound": "The file \"{filename}\" cannot be found", "error.file.orientation": "The orientation of the image must be \"{orientation}\"", + "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"", "error.file.type.forbidden": "You are not allowed to upload {type} files", "error.file.type.invalid": "Invalid file type: {type}", "error.file.undefined": "The file cannot be found", @@ -162,6 +179,7 @@ "error.page.delete": "The page \"{slug}\" cannot be deleted", "error.page.delete.confirm": "Please enter the page title to confirm", "error.page.delete.hasChildren": "The page has subpages and cannot be deleted", + "error.page.delete.multiple": "Not all pages could be deleted. Try each remaining page individually to see the specific error that prevents deletion.", "error.page.delete.permission": "You are not allowed to delete \"{slug}\"", "error.page.draft.duplicate": "A page draft with the URL appendix \"{slug}\" already exists", "error.page.duplicate": "A page with the URL appendix \"{slug}\" already exists", @@ -338,6 +356,9 @@ "field.blocks.video.url.label": "Video-URL", "field.blocks.video.url.placeholder": "https://youtube.com/?v=", + "field.entries.delete.confirm.all": "Do you really want to delete all entries?", + "field.entries.empty": "No entries yet", + "field.files.empty": "No files selected yet", "field.files.empty.single": "No file selected yet", @@ -373,10 +394,18 @@ "file.sort": "Change position", "files": "Files", + "files.delete.confirm.selected": "Do you really want to delete the selected files? This action cannot be undone.", "files.empty": "No files yet", "filter": "Filter", + "form.discard": "Discard changes", + "form.discard.confirm": "Do you really want to discard all your changes?", + "form.locked": "This content is disabled for you as it is currently edited by another user", + "form.unsaved": "The current changes have not yet been saved", + "form.preview": "Preview changes", + "form.preview.draft": "Preview draft", + "hide": "Hide", "hour": "Hour", "hue": "Hue", @@ -420,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", @@ -452,6 +486,8 @@ "license.status.missing.bubble": "Ready to launch your site?", "license.status.missing.info": "No valid license", "license.status.missing.label": "Please activate your license", + "license.status.unknown.info": "The license status is unknown", + "license.status.unknown.label": "Unknown", "license.manage": "Manage your licenses", "license.purchased": "Purchased", "license.success": "Thank you for supporting Kirby", @@ -463,7 +499,10 @@ "loading": "Loading", "lock.unsaved": "Unsaved changes", - "lock.unsaved.empty": "There are no more unsaved changes", + "lock.unsaved.empty": "There are no unsaved changes", + "lock.unsaved.files": "Unsaved files", + "lock.unsaved.pages": "Unsaved pages", + "lock.unsaved.users": "Unsaved accounts", "lock.isLocked": "Unsaved changes by {email}", "lock.unlock": "Unlock", "lock.unlock.submit": "Unlock and overwrite unsaved changes by {email}", @@ -570,6 +609,7 @@ "page.status.unlisted.description": "The page is only accessible via URL", "pages": "Pages", + "pages.delete.confirm.selected": "Do you really want to delete the selected pages? This action cannot be undone.", "pages.empty": "No pages yet", "pages.status.draft": "Drafts", "pages.status.listed": "Published", @@ -586,6 +626,10 @@ "plugins": "Plugins", "prev": "Previous", "preview": "Preview", + + "publish": "Publish", + "published": "Published", + "remove": "Remove", "rename": "Rename", "renew": "Renew", @@ -605,6 +649,7 @@ "role.nobody.title": "Nobody", "save": "Save", + "saved": "Saved", "search": "Search", "searching": "Searching", "search.min": "Enter {min} characters to search", @@ -631,7 +676,6 @@ "system.info.copy": "Copy info", "system.info.copied": "System info copied", - "system.issues.api.methods": "Your server does not support PATCH requests", "system.issues.content": "The content folder seems to be exposed", "system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates", "system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates", @@ -658,6 +702,12 @@ "tel": "Phone", "tel.placeholder": "+49123456789", "template": "Template", + + "theme": "Theme", + "theme.light": "Lights on", + "theme.dark": "Lights off", + "theme.automatic": "Match system default", + "title": "Title", "today": "Today", @@ -728,10 +778,13 @@ "users": "Users", "version": "Version", + "version.changes": "Changed version", + "version.compare": "Compare versions", "version.current": "Current version", "version.latest": "Latest version", "versionInformation": "Version information", + "view": "View", "view.account": "Your account", "view.installation": "Installation", "view.languages": "Languages", diff --git a/kirby/i18n/translations/eo.json b/kirby/i18n/translations/eo.json index c4a8fd4..2262bcb 100644 --- a/kirby/i18n/translations/eo.json +++ b/kirby/i18n/translations/eo.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/es_419.json b/kirby/i18n/translations/es_419.json index bbfa123..8d55c34 100644 --- a/kirby/i18n/translations/es_419.json +++ b/kirby/i18n/translations/es_419.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/es_ES.json b/kirby/i18n/translations/es_ES.json index c572229..b1e521f 100644 --- a/kirby/i18n/translations/es_ES.json +++ b/kirby/i18n/translations/es_ES.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/fa.json b/kirby/i18n/translations/fa.json index 3009ca6..89c45f8 100644 --- a/kirby/i18n/translations/fa.json +++ b/kirby/i18n/translations/fa.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/fi.json b/kirby/i18n/translations/fi.json index 75a75f5..78a9cfc 100644 --- a/kirby/i18n/translations/fi.json +++ b/kirby/i18n/translations/fi.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/fr.json b/kirby/i18n/translations/fr.json index 769a184..a512c59 100644 --- a/kirby/i18n/translations/fr.json +++ b/kirby/i18n/translations/fr.json @@ -30,13 +30,13 @@ "date.select": "Choisir une date", "day": "Jour", - "days.fri": "Ven", - "days.mon": "Lun", - "days.sat": "Sam", - "days.sun": "Dim", - "days.thu": "Jeu", - "days.tue": "Mar", - "days.wed": "Mer", + "days.fri": "Ven.", + "days.mon": "Lun.", + "days.sat": "Sam.", + "days.sun": "Dim.", + "days.thu": "Jeu.", + "days.tue": "Mar.", + "days.wed": "Mer.", "debugging": "Débogage", @@ -80,12 +80,12 @@ "error.avatar.create.fail": "L’image du profil n’a pu être transférée", "error.avatar.delete.fail": "L’image du profil n’a pu être supprimée", "error.avatar.dimensions.invalid": "Veuillez choisir une image de profil de largeur et hauteur inférieures à 3000 pixels", - "error.avatar.mime.forbidden": "L'image du profil utilisateur doit être un fichier JPEG ou PNG", + "error.avatar.mime.forbidden": "L’image du profil utilisateur doit être un fichier JPEG ou PNG", "error.blueprint.notFound": "Le blueprint « {name} » n’a pu être chargé", "error.blocks.max.plural": "Vous ne devez pas ajouter plus de {max} blocs", - "error.blocks.max.singular": "Vous ne devez pas ajouter plus d'un bloc", + "error.blocks.max.singular": "Vous ne devez pas ajouter plus d’un bloc", "error.blocks.min.plural": "Vous devez ajouter au moins {min} blocs", "error.blocks.min.singular": "Vous devez ajouter au moins un bloc", "error.blocks.validation": "Il y a une erreur sur le champ « {field} » du bloc {index} utilisant le type de bloc « {fieldset} »", @@ -119,9 +119,9 @@ "error.file.delete.multiple": "Tous les fichiers n’ont pu être supprimés. Essayez avec chaque fichier restant individuellement pour voir quelle erreur empêche sa suppression.", "error.file.duplicate": "Un fichier nommé « {filename} » existe déjà", "error.file.extension.forbidden": "L’extension « {extension} » n’est pas autorisée", - "error.file.extension.invalid": "Extension incorrecte : {extension}", + "error.file.extension.invalid": "Extension invalide : {extension}", "error.file.extension.missing": "L’extension pour « {filename} » est manquante", - "error.file.maxheight": "La hauteur de l'image ne doit pas excéder {height} pixels", + "error.file.maxheight": "La hauteur de l’image ne doit pas excéder {height} pixels", "error.file.maxsize": "Le fichier est trop volumineux", "error.file.maxwidth": "La largeur de l’image ne doit pas excéder {width} pixels", "error.file.mime.differs": "Le fichier transféré doit être du même type de média « {mime} »", @@ -143,11 +143,11 @@ "error.form.incomplete": "Veuillez corriger toutes les erreurs du formulaire…", "error.form.notSaved": "Le formulaire n’a pu être enregistré", - "error.language.code": "Veuillez saisir un code correct pour la langue", + "error.language.code": "Veuillez saisir un code valide pour la langue", "error.language.create.permission": "Vous n’êtes pas autorisé à créer une langue", "error.language.delete.permission": "Vous n’êtes pas autorisé à supprimer la langue", "error.language.duplicate": "Cette langue existe déjà", - "error.language.name": "Veuillez saisir un nom correct pour la langue", + "error.language.name": "Veuillez saisir un nom valide pour la langue", "error.language.notFound": "La langue n’a pu être trouvée", "error.language.update.permission": "Vous n’êtes pas autorisé à modifier la langue", @@ -155,7 +155,7 @@ "error.layout.validation.settings": "Il y a une erreur dans les paramètres de la disposition {index}", "error.license.domain": "Le domaine de la licence est manquant", - "error.license.email": "Veuillez saisir un courriel correct", + "error.license.email": "Veuillez saisir un courriel valide", "error.license.format": "Veuillez saisir un numéro de licence valide", "error.license.verification": "La licence n’a pu être vérifiée", @@ -168,7 +168,7 @@ "error.page.changeSlug.permission": "Vous n’êtes pas autorisé à modifier l’identifiant d’URL pour « {slug} »", "error.page.changeSlug.reserved": "Le chemin des pages de premier niveau ne doit pas commencer par « {path} »", - "error.page.changeStatus.incomplete": "La page comporte des erreurs et ne peut pas être publiée", + "error.page.changeStatus.incomplete": "La page comporte des erreurs et ne peut être publiée", "error.page.changeStatus.permission": "Le statut de cette page ne peut être modifié", "error.page.changeStatus.toDraft.invalid": "La page « {slug} » ne peut être convertie en brouillon", "error.page.changeTemplate.invalid": "Le modèle de la page « {slug} » ne peut être changé", @@ -192,11 +192,11 @@ "error.page.move.permission": "Vous n’êtes pas autorisé à déplacer « {slug} » ", "error.page.move.template": "Le modèle « {template} » n’est pas accepté en tant que sous-page de « {parent} »", "error.page.notFound": "La page « {slug} » n’a pu être trouvée", - "error.page.num.invalid": "Veuillez saisir un numéro de position correct. Les numéros ne doivent pas être négatifs.", - "error.page.slug.invalid": "Veuillez entrer un identifiant d’URL correct", + "error.page.num.invalid": "Veuillez saisir un numéro de position valide. Les numéros ne doivent pas être négatifs.", + "error.page.slug.invalid": "Veuillez entrer un identifiant d’URL valide", "error.page.slug.maxlength": "L’identifiant d’URL doit faire moins de « {length} » caractères", "error.page.sort.permission": "La page « {slug} » ne peut être réordonnée", - "error.page.status.invalid": "Veuillez choisir un statut de page correct", + "error.page.status.invalid": "Veuillez choisir un statut de page valide", "error.page.undefined": "La page n’a pu être trouvée", "error.page.update.permission": "Vous n’êtes pas autorisé à modifier « {slug} »", @@ -211,7 +211,7 @@ "error.section.pages.min.singular": "La section « {section} » requiert au moins une page", "error.section.notLoaded": "La section « {name} » n’a pu être chargée", - "error.section.type.invalid": "Le type de section « {type} » est incorrect", + "error.section.type.invalid": "Le type de section « {type} » est invalide", "error.site.changeTitle.empty": "Le titre ne peut être vide", "error.site.changeTitle.permission": "Vous n’êtes pas autorisé à modifier le titre du site", @@ -236,38 +236,38 @@ "error.user.delete.lastUser": "Le dernier utilisateur ne peut être supprimé", "error.user.delete.permission": "Vous n’êtes pas autorisé à supprimer l’utilisateur « {name} »", "error.user.duplicate": "Un utilisateur avec le courriel « {email} » existe déjà", - "error.user.email.invalid": "Veuillez saisir un courriel correct", - "error.user.language.invalid": "Veuillez saisir une langue correcte", + "error.user.email.invalid": "Veuillez saisir un courriel valide", + "error.user.language.invalid": "Veuillez saisir une langue valide", "error.user.notFound": "L’utilisateur « {name} » n’a pu être trouvé", "error.user.password.excessive": "Veuillez entrer un mot de passe valide. Les mots de passe ne doivent pas dépasser 1000 caractères de long.", "error.user.password.invalid": "Veuillez saisir un mot de passe valide. Les mots de passe doivent comporter au moins 8 caractères.", "error.user.password.notSame": "Les mots de passe ne sont pas identiques", "error.user.password.undefined": "Cet utilisateur n’a pas de mot de passe", "error.user.password.wrong": "Mot de passe incorrect", - "error.user.role.invalid": "Veuillez saisir un rôle correct", + "error.user.role.invalid": "Veuillez saisir un rôle valide", "error.user.undefined": "L’utilisateur n’a pu être trouvé", "error.user.update.permission": "Vous n’êtes pas autorisé à modifier l’utilisateur « {name} »", "error.validation.accepted": "Veuillez confirmer", "error.validation.alpha": "Veuillez saisir uniquement des caractères alphabétiques minuscules", "error.validation.alphanum": "Veuillez ne saisir que des minuscules de a à z et des chiffres de 0 à 9", - "error.validation.anchor": "Veuillez entrer un lien ancré correct", + "error.validation.anchor": "Veuillez entrer un lien d’ancrage correct", "error.validation.between": "Veuillez saisir une valeur entre « {min} » et « {max} »", "error.validation.boolean": "Veuillez confirmer ou refuser", "error.validation.color": "Veuillez entrer une couleur valide dans le format {format}", "error.validation.contains": "Veuillez saisir une valeur contenant « {needle} »", - "error.validation.date": "Veuillez saisir une date correcte", + "error.validation.date": "Veuillez saisir une date valide", "error.validation.date.after": "Veuillez saisir une date après {date}", "error.validation.date.before": "Veuillez saisir une date avant {date}", "error.validation.date.between": "Veuillez saisir une date entre {min} et {max}", "error.validation.denied": "Veuillez refuser", "error.validation.different": "La valeur ne doit pas être « {other} »", - "error.validation.email": "Veuillez saisir un courriel correct", + "error.validation.email": "Veuillez saisir un courriel valide", "error.validation.endswith": "La valeur doit se terminer par « {end} »", - "error.validation.filename": "Veuillez saisir un nom de fichier correct", + "error.validation.filename": "Veuillez saisir un nom de fichier valide", "error.validation.in": "Veuillez saisir l’un des éléments suivants: ({in})", - "error.validation.integer": "Veuillez saisir un entier correct", - "error.validation.ip": "Veuillez saisir une adresse IP correcte", + "error.validation.integer": "Veuillez saisir un entier valide", + "error.validation.ip": "Veuillez saisir une adresse IP valide", "error.validation.less": "Veuillez saisir une valeur inférieure à {max}", "error.validation.linkType": "Le type de lien n’est pas autorisé", "error.validation.match": "La valeur ne correspond pas au modèle attendu", @@ -280,19 +280,19 @@ "error.validation.more": "Veuillez saisir une valeur supérieure à {min}", "error.validation.notcontains": "Veuillez saisir une valeur ne contenant pas « {needle} »", "error.validation.notin": "Veuillez ne saisir aucun des éléments suivants: ({notIn})", - "error.validation.option": "Veuillez sélectionner une option correcte", - "error.validation.num": "Veuillez saisir un nombre correct", + "error.validation.option": "Veuillez sélectionner une option valide", + "error.validation.num": "Veuillez saisir un nombre valide", "error.validation.required": "Veuillez saisir quelque chose", "error.validation.same": "Veuillez saisir « {other} »", "error.validation.size": "La grandeur de la valeur doit être « {size} »", "error.validation.startswith": "La valeur doit commencer par « {start} »", "error.validation.tel": "Veuillez saisir un numéro de téléphone non formaté", - "error.validation.time": "Veuillez saisir une heure correcte", + "error.validation.time": "Veuillez saisir une heure valide", "error.validation.time.after": "Veuillez saisir une heure après {time}", "error.validation.time.before": "Veuillez saisir une heure avant {time}", "error.validation.time.between": "Veuillez saisir une heure entre {min} et {max}", "error.validation.uuid": "Veuillez saisir un UUID valide", - "error.validation.url": "Veuillez saisir une URL correcte", + "error.validation.url": "Veuillez saisir une URL valide", "expand": "Déplier", "expand.all": "Tout déplier", @@ -371,7 +371,7 @@ "field.object.empty": "Pas encore d‘information", - "field.pages.empty": "Pas encore de page sélectionnée", + "field.pages.empty": "Pas encore de pages sélectionnées", "field.pages.empty.single": "Pas encore de page sélectionnée", "field.structure.delete.confirm": "Voulez-vous vraiment supprimer cette ligne ?", @@ -401,7 +401,7 @@ "form.discard": "Annuler les modifications", "form.discard.confirm": "Voulez-vous vraiment annuler toutes les modifications ?", - "form.locked": "Ce contenu est désactivé pour vous car il est actuellement édité par un autre utilisateur.", + "form.locked": "Vous ne pouvez pas modifier ce contenu car il est en cours d'édition par un autre utilisateur.", "form.unsaved": "Les modifications actuelles n’ont pas encore été enregistrées", "form.preview": "Prévisualiser les modifications", "form.preview.draft": "Prévisualiser le brouillon", @@ -440,7 +440,7 @@ "language.direction.ltr": "De gauche à droite", "language.direction.rtl": "De droite à gauche", "language.locale": "Locales PHP", - "language.locale.warning": "Vous utilisez une Locale PHP personnalisée. Veuillez la modifier dans le fichier de langue situé dans /site/languages", + "language.locale.warning": "Vous utilisez un identifiant régional personnalisée. Veuillez le modifier dans le fichier de langue situé dans /site/languages", "language.name": "Nom", "language.secondary": "Langue secondaire", "language.settings": "Préférences de langue", @@ -449,7 +449,12 @@ "language.variables.empty": "Pas encore de traductions", "language.variable.delete.confirm": "Voulez-vous vraiment supprimer la variable pour {key} ?", + "language.variable.entries": "Valeurs", + "language.variable.entries.help": "Chaque chaîne sera utilisée pour son nombre d’éléments correspondant, par exemple trois chaînes correspondront dans l'ordre à 0, 1, 2 et plus éléments. Utilisez le jeton {count} pour insérer le nombre d’éléments réel.", "language.variable.key": "Clé", + "language.variable.multiple": "Dénombrable ?", + "language.variable.multiple.text": "Utiliser des chaînes de traduction différentes", + "language.variable.multiple.help": "Vous pouvez utiliser des valeurs différentes en fonction d'un nombre d’éléments que vous passez avec la variable de langue, ce qui vous permet de créer des traductions dynamiques, par exemple au singulier et au pluriel.", "language.variable.notFound": "La variable n’a pu être trouvée", "language.variable.value": "Valeur", @@ -463,7 +468,7 @@ "license.activate": "Activer maintenant", "license.activate.label": "Veuillez activer votre licence", "license.activate.domain": "Votre licence sera activée pour {host}.", - "license.activate.local": "Vous êtes sur le point d‘activer votre licence de Kirby pour votre domaine local {host}. Si ce site doit être activé sur un domaine publique, veuillez plutôt l‘activer là-bas. Si {host} est bien le domaine pour lequel vous voulez activer votre licence, veuillez continuer.", + "license.activate.local": "Vous êtes sur le point d‘activer votre licence de Kirby pour votre domaine local {host}. Si ce site doit être activé sur un domaine publique, veuillez plutôt l’activer là-bas. Si {host} est bien le domaine pour lequel vous voulez activer votre licence, veuillez continuer.", "license.activated": "Activée", "license.buy": "Acheter une licence", "license.code": "Code", @@ -530,7 +535,7 @@ "login.totp.enable.confirm.help": "Après cette configuration, nous vous demanderons un code à usage unique à chaque connexion.", "login.totp.enable.success": "Codes à usage unique activés", "login.totp.disable.option": "Désactiver les codes à usage unique", - "login.totp.disable.label": "Saisissez votre mot de passe pour désactiver les codes à usage unique.", + "login.totp.disable.label": "Saisissez votre mot de passe pour désactiver les codes à usage unique", "login.totp.disable.help": "Un second facteur différent, par exemple un code de connexion envoyé par courriel, vous sera demandé à la connexion. Vous pourrez à nouveau configurer les codes à usage unique ultérieurement.", "login.totp.disable.admin": "

Cela désactivera les codes à usage unique pour {user}.

Un second facteur différent, par exemple un code de connexion envoyé par courriel lui sera demandé à la connexion. {user} pourra à nouveau configurer les codes à usage unique ultérieurement.

", "login.totp.disable.success": "Codes à usage unique désactivés", @@ -695,12 +700,12 @@ "system.updateStatus.upgrade": "Mise à jour { version } disponible", "tel": "Téléphone", - "tel.placeholder": "+33123456789", + "tel.placeholder": "+3312345678", "template": "Modèle", "theme": "Thème", - "theme.light": "Allumer", - "theme.dark": "Éteindre", + "theme.light": "Clair", + "theme.dark": "Sombre", "theme.automatic": "Suivre le réglage système", "title": "Titre", diff --git a/kirby/i18n/translations/hu.json b/kirby/i18n/translations/hu.json index 56424ac..442122e 100644 --- a/kirby/i18n/translations/hu.json +++ b/kirby/i18n/translations/hu.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/id.json b/kirby/i18n/translations/id.json index b6f0e0f..a26de0e 100644 --- a/kirby/i18n/translations/id.json +++ b/kirby/i18n/translations/id.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/is_IS.json b/kirby/i18n/translations/is_IS.json index 2572bd1..dec18ce 100644 --- a/kirby/i18n/translations/is_IS.json +++ b/kirby/i18n/translations/is_IS.json @@ -449,7 +449,12 @@ "language.variables.empty": "Engar þýðingar enn", "language.variable.delete.confirm": "Ertu viss um að þú viljir nú fjarlægja breytuna fyrir {key}?", + "language.variable.entries": "Gildi", + "language.variable.entries.help": "Hver strengur verður notaður fyrir samsvarandi fjölda, t.d. þrír strengir munu passa til að telja 0, 1, 2 og fleiri. Notaðu {count} staðgengilinn fyrir raunverulegan fjölda.", "language.variable.key": "Lykill", + "language.variable.multiple": "Teljanlegt?", + "language.variable.multiple.text": "Notaðu annan textastreng fyrir þýðingu", + "language.variable.multiple.help": "Þú getur notað mismunandi gildi eftir því hvaða talningu þú sendir með tungumálabreytunni, sem gerir þér kleift að búa til breytilegar þýðingar, t.d. eintölu og fleirtölu.", "language.variable.notFound": "Breytan fannst hreint ekki", "language.variable.value": "Gildi", diff --git a/kirby/i18n/translations/it.json b/kirby/i18n/translations/it.json index 174da59..59bb729 100644 --- a/kirby/i18n/translations/it.json +++ b/kirby/i18n/translations/it.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/ko.json b/kirby/i18n/translations/ko.json index 41f85a7..e29a4a6 100644 --- a/kirby/i18n/translations/ko.json +++ b/kirby/i18n/translations/ko.json @@ -449,7 +449,12 @@ "language.variables.empty": "번역이 없습니다.", "language.variable.delete.confirm": "변수({key})를 삭제할까요?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "키", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "변수를 찾을 수 없습니다.", "language.variable.value": "값", diff --git a/kirby/i18n/translations/lt.json b/kirby/i18n/translations/lt.json index a6706c4..fd04cdf 100644 --- a/kirby/i18n/translations/lt.json +++ b/kirby/i18n/translations/lt.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/nb.json b/kirby/i18n/translations/nb.json index 236e105..acd8d66 100644 --- a/kirby/i18n/translations/nb.json +++ b/kirby/i18n/translations/nb.json @@ -449,7 +449,12 @@ "language.variables.empty": "Ingen oversettelse enda", "language.variable.delete.confirm": "Ønsker du virkelig å slette variablen for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "Variablen kan ikke bli funnet", "language.variable.value": "Verdi", diff --git a/kirby/i18n/translations/nl.json b/kirby/i18n/translations/nl.json index ccd45ca..1e04eb5 100644 --- a/kirby/i18n/translations/nl.json +++ b/kirby/i18n/translations/nl.json @@ -449,7 +449,12 @@ "language.variables.empty": "Nog geen vertalingen", "language.variable.delete.confirm": "Weet je zeker dat je de variabele voor {key} wil verwijderen?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "De variabele kan niet gevonden worden", "language.variable.value": "Waarde", diff --git a/kirby/i18n/translations/pl.json b/kirby/i18n/translations/pl.json index ae5a73b..8583879 100644 --- a/kirby/i18n/translations/pl.json +++ b/kirby/i18n/translations/pl.json @@ -20,9 +20,9 @@ "coordinates": "Współrzędne", "copy": "Kopiuj", "copy.all": "Skopiuj wszystko", - "copy.success": "{count} skopiowanych!", + "copy.success": "Skopiowane", "copy.success.multiple": "{count} skopiowanych!", - "copy.url": "Copy URL", + "copy.url": "Skopiuj URL", "create": "Utwórz", "custom": "Niestandardowe", @@ -92,16 +92,16 @@ "error.cache.type.invalid": "Nieprawidłowy typ pamięci podręcznej „{type}”", - "error.content.lock.delete": "The version is locked and cannot be deleted", - "error.content.lock.move": "The source version is locked and cannot be moved", - "error.content.lock.publish": "This version is already published", - "error.content.lock.replace": "The version is locked and cannot be replaced", - "error.content.lock.update": "The version is locked and cannot be updated", + "error.content.lock.delete": "Ta wersja jest zablokowana i nie można jej usunąć", + "error.content.lock.move": "Ta wersja jest zablokowana i nie można jej przenieść", + "error.content.lock.publish": "Ta wersja jest już opublikowana", + "error.content.lock.replace": "Ta wersja jest zablokowana i nie można jej zastąpić", + "error.content.lock.update": "Ta wersja jest zablokowana i nie można jej zaktualizować", - "error.entries.max.plural": "You must not add more than {max} entries", - "error.entries.max.singular": "You must not add more than one entry", - "error.entries.min.plural": "You must add at least {min} entries", - "error.entries.min.singular": "You must add at least one entry", + "error.entries.max.plural": "Nie można dodać więcej niż {max} elementy/-ów", + "error.entries.max.singular": "Nie można dodać więcej niż jednego elementu", + "error.entries.min.plural": "Musisz dodać co najmniej {min} elementy/-ów", + "error.entries.min.singular": "Musisz dodać co najmniej jeden element", "error.entries.supports": "\"{type}\" field type is not supported for the entries field", "error.entries.validation": "Wystąpił błąd w polu \"{field}\" w wierszu {index}", @@ -394,17 +394,17 @@ "file.sort": "Zmień pozycję", "files": "Pliki", - "files.delete.confirm.selected": "Do you really want to delete the selected files? This action cannot be undone.", + "files.delete.confirm.selected": "Czy na pewno chcesz usunąć wybrane pliki? Tej czynności nie można cofnąć.", "files.empty": "Nie ma jeszcze żadnych plików", "filter": "Filtr", - "form.discard": "Discard changes", + "form.discard": "Odrzuć zmiany", "form.discard.confirm": "Do you really want to discard all your changes?", "form.locked": "This content is disabled for you as it is currently edited by another user", - "form.unsaved": "The current changes have not yet been saved", - "form.preview": "Preview changes", - "form.preview.draft": "Preview draft", + "form.unsaved": "Bieżące zmiany nie zostały jeszcze zapisane", + "form.preview": "Podejrzyj zmiany", + "form.preview.draft": "Podejrzyj szkic", "hide": "Ukryj", "hour": "Godzina", @@ -449,7 +449,12 @@ "language.variables.empty": "Nie ma jeszcze żadnych tłumaczeń", "language.variable.delete.confirm": "Czy na pewno chcesz usunąć zmienną przypisaną do klucza {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Klucz", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "Nie udało się odnaleźć zmiennej", "language.variable.value": "Wartość", @@ -481,7 +486,7 @@ "license.status.missing.bubble": "Gotowy/-a do uruchomienia strony?", "license.status.missing.info": "Brak ważnej licencji", "license.status.missing.label": "Aktywuj swoją licencję", - "license.status.unknown.info": "The license status is unknown", + "license.status.unknown.info": "Status licencji jest nieznany", "license.status.unknown.label": "Unknown", "license.manage": "Zarządzaj swoimi licencjami", "license.purchased": "Zakupiona", @@ -495,9 +500,9 @@ "lock.unsaved": "Niezapisane zmiany", "lock.unsaved.empty": "Nie ma już żadnych niezapisanych zmian", - "lock.unsaved.files": "Unsaved files", - "lock.unsaved.pages": "Unsaved pages", - "lock.unsaved.users": "Unsaved accounts", + "lock.unsaved.files": "Niezapisane pliki", + "lock.unsaved.pages": "Niezapisane strony", + "lock.unsaved.users": "Niezapisane konta", "lock.isLocked": "Niezapisane zmiany autorstwa {email}", "lock.unlock": "Odblokuj", "lock.unlock.submit": "Odblokuj i nadpisz niezapisane zmiany autorstwa {email}", @@ -622,7 +627,7 @@ "prev": "Poprzednie", "preview": "Podgląd", - "publish": "Publish", + "publish": "Opublikuj", "published": "Opublikowane", "remove": "Usuń", @@ -644,7 +649,7 @@ "role.nobody.title": "Nikt", "save": "Zapisz", - "saved": "Saved", + "saved": "Zapisane", "search": "Szukaj", "searching": "Searching", "search.min": "Aby wyszukać, wprowadź co najmniej {min} znaków", @@ -698,10 +703,10 @@ "tel.placeholder": "+48123456789", "template": "Szablon", - "theme": "Theme", - "theme.light": "Lights on", - "theme.dark": "Lights off", - "theme.automatic": "Match system default", + "theme": "Wygląd", + "theme.light": "Jasny", + "theme.dark": "Ciemny", + "theme.automatic": "Zgodny z ustawieniami systemu", "title": "Tytuł", "today": "Dzisiaj", @@ -761,7 +766,7 @@ "user.changeLanguage": "Zmień język", "user.changeName": "Zmień nazwę tego użytkownika", "user.changePassword": "Zmień hasło", - "user.changePassword.current": "Your current password", + "user.changePassword.current": "Twoje aktualne hasło", "user.changePassword.new": "Nowe hasło", "user.changePassword.new.confirm": "Potwierdź nowe hasło…", "user.changeRole": "Zmień rolę", @@ -773,13 +778,13 @@ "users": "Użytkownicy", "version": "Wersja", - "version.changes": "Changed version", - "version.compare": "Compare versions", + "version.changes": "Zmieniona wersja", + "version.compare": "Porównaj wersje", "version.current": "Obecna wersja", "version.latest": "Ostatnia wersja", "versionInformation": "Informacje o wersji", - "view": "View", + "view": "Pokaż", "view.account": "Twoje konto", "view.installation": "Instalacja", "view.languages": "Języki", diff --git a/kirby/i18n/translations/pt_BR.json b/kirby/i18n/translations/pt_BR.json index aba221d..36fae5f 100644 --- a/kirby/i18n/translations/pt_BR.json +++ b/kirby/i18n/translations/pt_BR.json @@ -449,7 +449,12 @@ "language.variables.empty": "Nenhuma tradução ainda", "language.variable.delete.confirm": "Tem a certeza que pretende eliminar a variável {key}?", + "language.variable.entries": "Valores", + "language.variable.entries.help": "Cada string será usada pela ordem correspondente à contagem. Isto é, três strings serão usadas, respetivamente, para as contagens 0, 1 e 2 ou mais. Utilize o marcador {count} para inserir o valor da contagem.", "language.variable.key": "Chave", + "language.variable.multiple": "Contável?", + "language.variable.multiple.text": "Utilize strings de tradução diferentes", + "language.variable.multiple.help": "É possível utilizar valores diferentes consoante a contagem associada à variável de idioma, permitindo assim a criação de traduções dinâmicas, como, por exemplo, para formas singulares e plurais.", "language.variable.notFound": "A variável não foi encontrada", "language.variable.value": "Valor", diff --git a/kirby/i18n/translations/pt_PT.json b/kirby/i18n/translations/pt_PT.json index 9815539..2e3a8c4 100644 --- a/kirby/i18n/translations/pt_PT.json +++ b/kirby/i18n/translations/pt_PT.json @@ -449,7 +449,12 @@ "language.variables.empty": "Nenhuma tradução ainda", "language.variable.delete.confirm": "Tem a certeza que pretende eliminar a variável {key}?", + "language.variable.entries": "Valores", + "language.variable.entries.help": "Cada string será utilizada pela ordem correspondente à contagem. Isto é, três strings serão utilizadas, respetivamente, para as contagens 0, 1 e 2 ou mais. Utilize o marcador {count} para inserir o valor real da contagem.", "language.variable.key": "Chave", + "language.variable.multiple": "Contável?", + "language.variable.multiple.text": "Utilize strings de tradução diferentes", + "language.variable.multiple.help": "É possível utilizar valores diferentes consoante a contagem associada à variável de idioma, permitindo assim a criação de traduções dinâmicas. Isto é, para formas singulares e plurais.", "language.variable.notFound": "Não foi possível encontrar a variável", "language.variable.value": "Valor", diff --git a/kirby/i18n/translations/ro.json b/kirby/i18n/translations/ro.json index 120852a..59cb6e9 100644 --- a/kirby/i18n/translations/ro.json +++ b/kirby/i18n/translations/ro.json @@ -449,7 +449,12 @@ "language.variables.empty": "Nicio traducere deocamdată", "language.variable.delete.confirm": "Chiar vrei să ștergi variabila pentru {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Cheie", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "Variabila nu a fost găsită", "language.variable.value": "Valoare", diff --git a/kirby/i18n/translations/ru.json b/kirby/i18n/translations/ru.json index dc10016..b943793 100644 --- a/kirby/i18n/translations/ru.json +++ b/kirby/i18n/translations/ru.json @@ -449,7 +449,12 @@ "language.variables.empty": "Пока нет переводов", "language.variable.delete.confirm": "Вы действительно хотите удалить переменную для {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Ключ", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "Переменная не найдена", "language.variable.value": "Значение", diff --git a/kirby/i18n/translations/sk.json b/kirby/i18n/translations/sk.json index 5b341aa..1650067 100644 --- a/kirby/i18n/translations/sk.json +++ b/kirby/i18n/translations/sk.json @@ -449,7 +449,12 @@ "language.variables.empty": "No translations yet", "language.variable.delete.confirm": "Do you really want to delete the variable for {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Key", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "The variable could not be found", "language.variable.value": "Value", diff --git a/kirby/i18n/translations/sr@latin.json b/kirby/i18n/translations/sr@latin.json new file mode 100644 index 0000000..8f27407 --- /dev/null +++ b/kirby/i18n/translations/sr@latin.json @@ -0,0 +1,799 @@ +{ + "account.changeName": "Promenite vaše ime", + "account.delete": "Izbrišite vaš nalog", + "account.delete.confirm": "Da li zaista želite da izbrišete vaš nalog? Bićete odjavljeni odmah, i vaš nalog ne može biti povraćen.", + + "activate": "Aktivirati", + "add": "Dodaj", + "alpha": "Alfa", + "author": "Autor", + "avatar": "Profilna slika", + "back": "Nazad", + "cancel": "Otkažite", + "change": "Promenite", + "close": "Zatvorite", + "changes": "Promene", + "confirm": "Ok", + "collapse": "Skupi", + "collapse.all": "Skupi sve", + "color": "Boja", + "coordinates": "Koordinate", + "copy": "Kopiraj", + "copy.all": "Kopiraj sve", + "copy.success": "Copied", + "copy.success.multiple": "{count} kopirano!", + "copy.url": "Copy URL", + "create": "Kreiraj", + "custom": "Običaj", + + "date": "Datum", + "date.select": "Izaberite datum", + + "day": "Dan", + "days.fri": "Pet", + "days.mon": "Pon", + "days.sat": "Sub", + "days.sun": "Ned", + "days.thu": "Čet", + "days.tue": "Uto", + "days.wed": "Sre", + + "debugging": "Otklanjanje grešaka", + + "delete": "Obriši", + "delete.all": "Obriši sve", + + "dialog.fields.empty": "Ovaj dijalog nema polja", + "dialog.files.empty": "Nema fajlova koji se mogu izabrati", + "dialog.pages.empty": "Nema stranica koje se mogu izabrati", + "dialog.text.empty": "Ovaj dijalog ne definiše nikakav tekst", + "dialog.users.empty": "Nema korisnika koji se mogu izabrati", + + "dimensions": "Dimenzije", + "disable": "Onemogućiti", + "disabled": "Onemogućeno", + "discard": "Odbaci", + + "drawer.fields.empty": "Ova fioka nema polja", + + "domain": "Domen", + "download": "Preuzmi", + "duplicate": "Kopiraj", + + "edit": "Uredi", + + "email": "Email", + "email.placeholder": "mail@example.com", + + "enter": "Uneti", + "entries": "Unosi", + "entry": "Unos", + + "environment": "Okruženje", + + "error": "Greška", + "error.access.code": "Neispravan kod", + "error.access.login": "Neispravna prijava", + "error.access.panel": "Niste ovlašćeni da uđete u administrativni panel", + "error.access.view": "Niste ovlašćeni da pristupite ovom delu panela", + + "error.avatar.create.fail": "Profilna slika nije mogla biti otpremljena", + "error.avatar.delete.fail": "Profilna slika nije mogla biti obrisana", + "error.avatar.dimensions.invalid": "Molimo neka visina i širina Vaše profilne slike budu ispod 3000 piksela", + "error.avatar.mime.forbidden": "Profilna slika mora biti JPEG ili PNG fajl", + + "error.blueprint.notFound": "Blueprint \"{name}\" nije mogao biti učitan", + + "error.blocks.max.plural": "Ne smete da dodajete više od {max} blokova", + "error.blocks.max.singular": "Ne smete da dodate više od jednog bloka", + "error.blocks.min.plural": "Morate dodati najmanje {min} blokova", + "error.blocks.min.singular": "Morate dodati najmanje jedan blok", + "error.blocks.validation": "Postoji greška u \"{field}\" polju u bloku {index} koji koristi \"{fieldset}\" tip bloka ", + + "error.cache.type.invalid": "Neispravan tip keša \"{type}\"", + + "error.content.lock.delete": "The version is locked and cannot be deleted", + "error.content.lock.move": "The source version is locked and cannot be moved", + "error.content.lock.publish": "This version is already published", + "error.content.lock.replace": "The version is locked and cannot be replaced", + "error.content.lock.update": "The version is locked and cannot be updated", + + "error.entries.max.plural": "You must not add more than {max} entries", + "error.entries.max.singular": "You must not add more than one entry", + "error.entries.min.plural": "You must add at least {min} entries", + "error.entries.min.singular": "You must add at least one entry", + "error.entries.supports": "\"{type}\" field type is not supported for the entries field", + "error.entries.validation": "Postoji greška u redu \"{field}\" na ovom polju {index}", + + "error.email.preset.notFound": "Email preset \"{name}\" nije pronađen", + + "error.field.converter.invalid": "Neispravan converter \"{converter}\"", + "error.field.link.options": "Invalid options: {options}", + "error.field.type.missing": "Polje \"{ name }\": Tip polja \"{ type }\" ne postoji", + + "error.file.changeName.empty": "Naziv ne sme biti prazan", + "error.file.changeName.permission": "Niste ovlašćeni da promenite naziv \"{filename}\"", + "error.file.changeTemplate.invalid": "Šablon za datoteku \"{id}\" se ne može promeniti u \"{template}\" (valid: \"{blueprints}\")", + "error.file.changeTemplate.permission": "Nije vam dozvoljeno da menjate šablon za datoteku \"{id}\"", + + "error.file.delete.multiple": "Not all files could be deleted. Try each remaining file individually to see the specific error that prevents deletion.", + "error.file.duplicate": "Fajl sa nazivom \"{filename}\" već postoji", + "error.file.extension.forbidden": "Extension \"{extension}\" nije dozvoljena", + "error.file.extension.invalid": "Nevažeći dodatak: {extension}", + "error.file.extension.missing": "Ekstenzije za \"{filename}\" nedostaju", + "error.file.maxheight": "Visina slike ne sme biti veća od {height} piksela", + "error.file.maxsize": "Datoteka je prevelika", + "error.file.maxwidth": "Širina slike ne sme biti veća od {width} piksela", + "error.file.mime.differs": "Otpremljeni fajl mora biti istog mime tipa \"{mime}\"", + "error.file.mime.forbidden": "Tip medija \"{mime}\" nije dozvoljen", + "error.file.mime.invalid": "Neispravan mime tip: {mime}", + "error.file.mime.missing": "Tip medija za \"{filename}\" nije bilo moguće detektovati", + "error.file.minheight": "Visina slike mora biti najmanje {height} piksela", + "error.file.minsize": "Datoteka je premala", + "error.file.minwidth": "Širina slike mora biti najmanje {width} piksela", + "error.file.name.unique": "Ime datoteke mora biti jedinstveno", + "error.file.name.missing": "Ime fajla ne može biti prazno", + "error.file.notFound": "Fajl \"{filename}\" nije mogao biti pronadjen", + "error.file.orientation": "Orijentacija slike mora biti \"{orientation}\"", + "error.file.sort.permission": "You are not allowed to change the sorting of \"{filename}\"", + "error.file.type.forbidden": "Niste ovlašćeni da otpremate {type} fajlove", + "error.file.type.invalid": "Nevažeći tip datoteke: {type}", + "error.file.undefined": "Fajl nije mogao biti pronadjen", + + "error.form.incomplete": "Molimo popravite sve greške u formularu...", + "error.form.notSaved": "Formular nije mogao biti sačuvan", + + "error.language.code": "Molimo ukucajte validan kod za jezik", + "error.language.create.permission": "You are not allowed to create a language", + "error.language.delete.permission": "You are not allowed to delete the language", + "error.language.duplicate": "Jezik već postoji", + "error.language.name": "Molimo upišite validno ime za jezik", + "error.language.notFound": "Jezik nije mogao biti pronađen", + "error.language.update.permission": "You are not allowed to update the language", + + "error.layout.validation.block": "Postoji greška u \"{field}\" polju u bloku {blockIndex} koji koristi \"{fieldset}\" tip bloka u rasporedu {layoutIndex}", + "error.layout.validation.settings": "Došlo je do greške u {index} podešavanjima ", + + "error.license.domain": "Nedostaje domen za licencu", + "error.license.email": "Molimo unesite ispravnu email adresu", + "error.license.format": "Molimo vas unesite važeći kod licence", + "error.license.verification": "Licenca nije mogla biti verifikovana", + + "error.login.totp.confirm.invalid": "Neispravan kod", + "error.login.totp.confirm.missing": "Molimo vas unesite trenutni kod", + + "error.object.validation": "Postoji greška u \"{label}\" polju: {message}", + + "error.offline": "Panel je trenutno van mreže", + + "error.page.changeSlug.permission": "Nije Vam dozvoljeno da promenite URL appendix za \"{slug}\"", + "error.page.changeSlug.reserved": "Putanja stranica najvišeg nivoa ne sme da počinje sa \"{path}\"", + "error.page.changeStatus.incomplete": "Ova stranica ima greške i ne može biti objavljena", + "error.page.changeStatus.permission": "Status ove stranice ne može biti promenjen", + "error.page.changeStatus.toDraft.invalid": "Stranica \"{slug}\" ne može biti prebačena u draft", + "error.page.changeTemplate.invalid": "Template za stranicu \"{slug}\" ne može biti promenjen", + "error.page.changeTemplate.permission": "Nije Vam dozvoljeno da promenite template za \"{slug}\"", + "error.page.changeTitle.empty": "Naslov ne može biti prazan", + "error.page.changeTitle.permission": "Nije Vam dozvoljeno da pormenite naslov za \"{slug}\"", + "error.page.create.permission": "Nije Vam dozvoljeno da kreirate \"{slug}\"", + "error.page.delete": "Stranica \"{slug}\" ne može biti obrisana", + "error.page.delete.confirm": "Molimo ukucajte naslov stranice da potvrdite", + "error.page.delete.hasChildren": "Stranica ima podstranice i ne može biti obrisana", + "error.page.delete.multiple": "Not all pages could be deleted. Try each remaining page individually to see the specific error that prevents deletion.", + "error.page.delete.permission": "Nemate ovlašćenja da obrišete \"{slug}\"", + "error.page.draft.duplicate": "Draft stranice sa URL appendix \"{slug}\" već postoji", + "error.page.duplicate": "Stranica sa URL appendix-om \"{slug}\" već postoji", + "error.page.duplicate.permission": "Nije vam dozvoljeno da kopirate \"{slug}\"", + "error.page.move.ancestor": "Stranica se ne može premestiti u sebe", + "error.page.move.directory": "Direktorijum stranice ne može da se premesti", + "error.page.move.duplicate": "Podstranica sa dodatkom URL \"{slug}\" već postoji", + "error.page.move.noSections": "The page \"{parent}\" cannot be a parent of any page because it lacks any pages sections in its blueprint", + "error.page.move.notFound": "Premeštena stranica nije pronađena", + "error.page.move.permission": "Nije vam dozvoljeno da se krećete \"{slug}\"", + "error.page.move.template": "Šablon \"{template}\" nije prihvaćen kao podstranica \"{parent}\"", + "error.page.notFound": "Stranica \"{slug}\" ne može biti pronadjena", + "error.page.num.invalid": "Molimo ukucajte ispravan broj za sortiranje. Brojevi ne mogu biti negativni. ", + "error.page.slug.invalid": "Molimo vas unesite važeći URL dodatak", + "error.page.slug.maxlength": "Dužina poluge mora biti manja od \"{length}\" karaktera ", + "error.page.sort.permission": "Stranica \"{slug}\" ne može biti sortirana", + "error.page.status.invalid": "Molimo podesite ispravan status stranice", + "error.page.undefined": "Stranica ne može biti pronađena", + "error.page.update.permission": "Nije Vam dozvoljeno da ažurirate \"{slug}\"", + + "error.section.files.max.plural": "Ne možete dodati više od {max} fajlova u \"{section}\" sekciju", + "error.section.files.max.singular": "Ne možete dodati više od jednog fajla u \"{section}\" sekciju", + "error.section.files.min.plural": "\"{section}\" sekcija zahteva najmanje {min} fajlova", + "error.section.files.min.singular": "\"{section}\" sekcija zahteva najmanje jedan fajl", + + "error.section.pages.max.plural": "Ne možete dodati više od {max} stranica u \"{section}\" sekciju", + "error.section.pages.max.singular": "Ne možete dodati više od jedne stranice u \"{section}\" sekciju", + "error.section.pages.min.plural": "\"{section}\" sekcija zahteva najmanje {min} stranica", + "error.section.pages.min.singular": "\"{section}\" sekcija zahteva najmanje jednu stranicu", + + "error.section.notLoaded": "Sekcija \"{name}\" nije mogla biti učitana", + "error.section.type.invalid": "Tip sekcije \"{type}\" nije ispravan", + + "error.site.changeTitle.empty": "Naslov ne može biti prazan", + "error.site.changeTitle.permission": "Nije Vam dozvoljeno da promenite naziv sajta", + "error.site.update.permission": "Nije Vam dozvoljeno da ažurirate sajt", + + "error.structure.validation": "Postoji greška u redu \"{field}\" na ovom polju {index}", + + "error.template.default.notFound": "Podrazumevani template ne postoji", + + "error.unexpected": "Došlo je do neočekivane greške! Omogućite režim za otklanjanje grešaka za više informacija: https://getkirby.com/docs/reference/system/options/debug", + + "error.user.changeEmail.permission": "Nije Vam dozvoljeno da promenite email za korisnika \"{name}\"", + "error.user.changeLanguage.permission": "Nije Vam dozvoljeno da promenite jezik za korisnika \"{name}\"", + "error.user.changeName.permission": "Nije Vam dozvoljeno da promenite ima za korisnika \"{name}\"", + "error.user.changePassword.permission": "Nije Vam dozvoljeno da promenite lozinku za korisnika \"{name}\"", + "error.user.changeRole.lastAdmin": "Rolu poslednjeg admina nije moguće promeniti", + "error.user.changeRole.permission": "Nije Vam dozvoljeno da promenite rolu korisnika \"{name}\"", + "error.user.changeRole.toAdmin": "Nije vam dozvoljeno da unapredite nekoga u ulogu administratora", + "error.user.create.permission": "Nije Vam dozvoljeno da kreirate ovog korisnika", + "error.user.delete": "Korisnik \"{name}\" ne može biti obrisan", + "error.user.delete.lastAdmin": "Poslednji admin ne može biti obrisan", + "error.user.delete.lastUser": "Poslednji korisnik ne može biti obrisan", + "error.user.delete.permission": "Nije Vam dozvoljeno da obrišete korisnika \"{name}\"", + "error.user.duplicate": "Korisnik sa email adresom \"{email}\" već postoji", + "error.user.email.invalid": "Molimo unesite ispravnu email adresu", + "error.user.language.invalid": "Molimo unesite ispravan jezik", + "error.user.notFound": "Korisnik \"{name}\" ne može biti pronadjen", + "error.user.password.excessive": "Molimo vas, unesite ispravnu šifru. Šifra ne sme biti duža od 1000 karaktera.", + "error.user.password.invalid": "Molimo unesite ispravnu lozinku. Lozinke moraju biti barem 8 karaktera dugačke. ", + "error.user.password.notSame": "Lozinke se ne poklapaju", + "error.user.password.undefined": "Ovaj korisnik nema lozinku", + "error.user.password.wrong": "Pogrešna lozinka", + "error.user.role.invalid": "Molimo unesite ispravnu rolu", + "error.user.undefined": "Korisnik nije mogao biti pronadjen", + "error.user.update.permission": "Nije Vam dozvoljeno da ažurirate korisnika \"{name}\"", + + "error.validation.accepted": "Molimo potvrdite", + "error.validation.alpha": "Molimo unesite karaktere izmedju a-z", + "error.validation.alphanum": "Molimo unesite samo karaktere izmedju a-z ili brojeve 0-9", + "error.validation.anchor": "Molimo vas unesite ispravan link", + "error.validation.between": "Molimo unesite vrednost izmedju \"{min}\" i \"{max}\"", + "error.validation.boolean": "Molimo potvrdite ili odbijte", + "error.validation.color": "Molimo vas unesite važeću boju u {format} format", + "error.validation.contains": "Molimo unesite vrednost koja sadrži \"{needle}\"", + "error.validation.date": "Molimo unesite ispravan datum", + "error.validation.date.after": "Molimo upišite natum nakon {date}", + "error.validation.date.before": "Molimo upišite datum pre {date}", + "error.validation.date.between": "Molimo dodajte datum između {min} i {max}", + "error.validation.denied": "Molimo odbijte", + "error.validation.different": "Vrednost ne može biti \"{other}\"", + "error.validation.email": "Molimo unesite ispravnu email adresu", + "error.validation.endswith": "Vrednost se mora završiti sa \"{end}\"", + "error.validation.filename": "Molimo unesite ispravno ime fajla", + "error.validation.in": "Molimo unesite nešto od sledećeg: ({in})", + "error.validation.integer": "Molimo unesite ispravan ceo broj", + "error.validation.ip": "Molimo unesite ispravnu IP adresu", + "error.validation.less": "Molimo unesite vrednost manju od {max}", + "error.validation.linkType": "Tip veze nije dozvoljen", + "error.validation.match": "Vrednost se ne uklapa u očekivani šablon", + "error.validation.max": "Molimo unesite vrednost jednsaku ili manju od {max}", + "error.validation.maxlength": "Molimo unestite kražu vrednost. (maks. {max} karaktera)", + "error.validation.maxwords": "Molimo unesite ne više od {max} reč(i)", + "error.validation.min": "Molimo unesite vrednost jednaku ili veću od {min}", + "error.validation.minlength": "Molimo unesite dužu vrednost. (min. {min} karaktera)", + "error.validation.minwords": "Molimo unesite minimun {min} reč(i)", + "error.validation.more": "Molimo vas unesite vrednost veću od {min}", + "error.validation.notcontains": "Molimo vas unesite vrednost koja ne sadrži \"{needle}\"", + "error.validation.notin": "Molimo vas nemojte unositi ništa od sledećeg: ({notIn})", + "error.validation.option": "Molimo izaberite važeću opciju", + "error.validation.num": "Molimo Vas da unesete važeći broj", + "error.validation.required": "Molimo vas unesite nešto", + "error.validation.same": "Molimo vas unesite \"{other}\"", + "error.validation.size": "Veličina vrednosti mora biti \"{size}\"", + "error.validation.startswith": "Vrednost mora početi sa \"{start}\"", + "error.validation.tel": "Molimo vas unesite neformatirani broj telefona", + "error.validation.time": "Molimo vas unesite važeće vreme", + "error.validation.time.after": "Molimo vas unesite vreme posle {time}", + "error.validation.time.before": "Molimo vas unesite vreme pre {time}", + "error.validation.time.between": "Molimo vas unesite vreme između {min} i {max}", + "error.validation.uuid": "Molimo vas unesite važeći UUID", + "error.validation.url": "Molimo vas da unesete važeći URL", + + "expand": "Proširite", + "expand.all": "Proširite sve", + + "field.invalid": "Polje je nevažeće", + "field.required": "Polje je obavezno", + "field.blocks.changeType": "Promenite tip", + "field.blocks.code.name": "Kod", + "field.blocks.code.language": "Jezik", + "field.blocks.code.placeholder": "Vaš kod…", + "field.blocks.delete.confirm": "Da li zaista želite da izbrišete ovaj blok?", + "field.blocks.delete.confirm.all": "Da li zaista želite da izbrišete sve blokove?", + "field.blocks.delete.confirm.selected": "Da li zaista želite da izbrišete izabrane blokove?", + "field.blocks.empty": "Još nema blokova", + "field.blocks.fieldsets.empty": "Još nema skupova polja", + "field.blocks.fieldsets.label": "Molimo izaberite tip bloka ...", + "field.blocks.fieldsets.paste": "Pritisnite{{ shortcut }} da biste uvezli rasporede/blokove iz međuspremnika. Biće umetnuti samo oni koji su dozvoljeni u trenutnom polju.", + "field.blocks.gallery.name": "Galerija", + "field.blocks.gallery.images.empty": "Još nema slika", + "field.blocks.gallery.images.label": "Slike", + "field.blocks.heading.level": "Nivo", + "field.blocks.heading.name": "Naslov", + "field.blocks.heading.text": "Tekst", + "field.blocks.heading.placeholder": "Naslov ...", + "field.blocks.figure.back.plain": "Plain", + "field.blocks.figure.back.pattern.light": "Pattern (light)", + "field.blocks.figure.back.pattern.dark": "Pattern (dark)", + "field.blocks.image.alt": "Alternativni tekst", + "field.blocks.image.caption": "Natpis", + "field.blocks.image.crop": "Isecite", + "field.blocks.image.link": "Link", + "field.blocks.image.location": "Lokacija", + "field.blocks.image.location.internal": "Ova veb lokacija\n \n \n​", + "field.blocks.image.location.external": "Eksterni izvor", + "field.blocks.image.name": "Slika", + "field.blocks.image.placeholder": "Odaberi sliku", + "field.blocks.image.ratio": "Odnos", + "field.blocks.image.url": "URL slike", + "field.blocks.line.name": "Linija", + "field.blocks.list.name": "Lista", + "field.blocks.markdown.name": "Markdown", + "field.blocks.markdown.label": "Tekst", + "field.blocks.markdown.placeholder": "Markdown …", + "field.blocks.quote.name": "Citat", + "field.blocks.quote.text.label": "Tekst", + "field.blocks.quote.text.placeholder": "Citat ...", + "field.blocks.quote.citation.label": "Citat", + "field.blocks.quote.citation.placeholder": "od …", + "field.blocks.text.name": "Tekst", + "field.blocks.text.placeholder": "Tekst ...", + "field.blocks.video.autoplay": "Autoplay", + "field.blocks.video.caption": "Natpis", + "field.blocks.video.controls": "Controls", + "field.blocks.video.location": "Lokacija", + "field.blocks.video.loop": "Loop", + "field.blocks.video.muted": "Muted", + "field.blocks.video.name": "Video", + "field.blocks.video.placeholder": "Unesite URL video snimka", + "field.blocks.video.poster": "Poster", + "field.blocks.video.preload": "Preload", + "field.blocks.video.url.label": "Video-URL", + "field.blocks.video.url.placeholder": "https://youtube.com/?v=", + + "field.entries.delete.confirm.all": "Da li zaista želite da izbrišete sve unose?", + "field.entries.empty": "Još nema unosa", + + "field.files.empty": "Još nijedna datoteka nije izabrana", + "field.files.empty.single": "No file selected yet", + + "field.layout.change": "Promenite izgled", + "field.layout.delete": "Brisanje rasporeda", + "field.layout.delete.confirm": "Da li zaista želite da obrišete ovaj raspored", + "field.layout.delete.confirm.all": "Da li zaista želite da izbrišete sve rasporede?", + "field.layout.empty": "Još nema redova", + "field.layout.select": "Izaberite raspored", + + "field.object.empty": "Još nema informacija", + + "field.pages.empty": "Još nijedna stranica nije izabrana", + "field.pages.empty.single": "No page selected yet", + + "field.structure.delete.confirm": "Da li zaista želite da izbrišete ovaj red?", + "field.structure.delete.confirm.all": "Da li zaista želite da izbrišete sve unose?", + "field.structure.empty": "Još nema unosa", + + "field.users.empty": "Još nije izabran nijedan korisnik", + "field.users.empty.single": "No user selected yet", + + "fields.empty": "Još uvek nema polja", + + "file": "Datoteka", + "file.blueprint": "Ova datoteka još uvek nema nacrt. Možete definisati podešavanje u /site/blueprints/files/{blueprint}.yml", + "file.changeTemplate": "Promenite šablon", + "file.changeTemplate.notice": "Promena šablona datoteke će ukloniti sadržaj za polja koja se ne podudaraju po tipu. Ako novi šablon definiše određena pravila, npr. dimenzije slike, one će se takođe nepovratno primenjivati. Koristite sa oprezom.", + "file.delete.confirm": "Da li zaista želite da izbrišete
{filename}?", + "file.focus.placeholder": "Postavite fokusnu tačku", + "file.focus.reset": "Uklonite fokusnu tačku", + "file.focus.title": "Fokusirajte", + "file.sort": "Promena pozicije", + + "files": "Fajlovi", + "files.delete.confirm.selected": "Do you really want to delete the selected files? This action cannot be undone.", + "files.empty": "Još nema fajlova", + + "filter": "Filter", + + "form.discard": "Discard changes", + "form.discard.confirm": "Do you really want to discard all your changes?", + "form.locked": "This content is disabled for you as it is currently edited by another user", + "form.unsaved": "The current changes have not yet been saved", + "form.preview": "Preview changes", + "form.preview.draft": "Preview draft", + + "hide": "Sakriti", + "hour": "Čas", + "hue": "Nijansa", + "import": "Uvoz", + "info": "Info", + "insert": "Ubaci", + "insert.after": "Ubaciti posle", + "insert.before": "Ubaciti pre", + "install": "Instaliraj", + + "installation": "Instalacija", + "installation.completed": "Panel je instaliran", + "installation.disabled": "Instalater panela je podrazumevano onemogućen na javnim serverima. Molimo vas pokrenite instalater na lokalnoj mašini ili ga omogućite pomoću panel.install opcije", + "installation.issues.accounts": "Fascikla /site/accounts ne postoji ili u nju nije moguće pisati", + "installation.issues.content": "Fascikla /content ne postoji ili u nju nije moguće pisati", + "installation.issues.curl": "Proširenje CURL je potrebno", + "installation.issues.headline": "Panel se ne može instalirati", + "installation.issues.mbstring": "Proširenje MB String je potrebno", + "installation.issues.media": "Fascikla /media ne postoji ili u nju nije moguće pisati", + "installation.issues.php": "Obavezno koristite PHP 8+", + "installation.issues.sessions": "Fascikla /site/sessions ne postoji ili u nju nije moguće pisati", + + "language": "Jezik", + "language.code": "Kod", + "language.convert": "Postavi kao podrazumevano", + "language.convert.confirm": "

Da li zaista želite da konvertujete {name} na podrazumevani jezik? Ovo se ne može poništiti.

Ako{name} ima neprevedenog sadržaja, više neće postojati važeći rezervni deo i delovi vašeg sajta mogu biti prazni.

", + "language.create": "Dodajte novi jezik", + "language.default": "Podrazumevani jezik", + "language.delete.confirm": "Da li zaista želite da izbrišete jezik {name} uključujući sve prevode? Ovo se ne može poništiti!", + "language.deleted": "Jezik je obrisan", + "language.direction": "Smer čitanja", + "language.direction.ltr": "S leva nadesno", + "language.direction.rtl": "S desna nalevo", + "language.locale": "PHP locale string", + "language.locale.warning": "Koristite prilagođeni lokal. Molimo vas izmenite ga u jezičkoj datoteci u /site/languages", + "language.name": "Ime", + "language.secondary": "Sekundarni jezik", + "language.settings": "Podešavanja jezika", + "language.updated": "Jezik je ažuriran", + "language.variables": "Jezičke varijable", + "language.variables.empty": "Još uvek nema prevoda", + + "language.variable.delete.confirm": "Da li zaista želite da izbrišete promenljivu za {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", + "language.variable.key": "Ključ", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", + "language.variable.notFound": "Promenljiva nije pronađena\n \n \n ", + "language.variable.value": "Vrednost", + + "languages": "Jezici", + "languages.default": "Podrazumevani jezik", + "languages.empty": "Još nema jezika", + "languages.secondary": "Sekundarni jezik", + "languages.secondary.empty": "Još nema sekundarnog jezika", + + "license": "Licenca", + "license.activate": "Aktivirajte ga sada", + "license.activate.label": "Molimo vas aktivirajte svoju licencu", + "license.activate.domain": "Vaša licenca će biti aktivirana za {host}.", + "license.activate.local": "Upravo ćete aktivirati svoju Kirby licencu za vaš lokalni domen {host}.Ako će ovaj sajt biti postavljen na javnom domenu, molimo vas aktivirajte ga tamo. Ako je {host} domen za koji želite da koristite svoju licencu, molimo vas nastavite.", + "license.activated": "Aktiviran", + "license.buy": "Kupite licencu", + "license.code": "Kod", + "license.code.help": "Nakon kupovine dobili ste svoju šifru licence putem email. Molimo vas da je kopirate i nalepite ovde.", + "license.code.label": "Molimo vas unesite šifru licence", + "license.status.active.info": "Uključuje nove glavne verzije do {date}", + "license.status.active.label": "Validna licenca", + "license.status.demo.info": "Ovo je demo instalacija", + "license.status.demo.label": "Demo", + "license.status.inactive.info": "Obnovite licencu da biste ažurirali na nove glavne verzije", + "license.status.inactive.label": "Nema novih glavnih verzija", + "license.status.legacy.bubble": "Da li ste spremni da obnovite svoju licencu?", + "license.status.legacy.info": "Vaša licenca ne pokriva ovu verziju", + "license.status.legacy.label": "Molimo vas obnovite vašu licencu", + "license.status.missing.bubble": "Da li ste spremni da pokrenete svoj sajt?", + "license.status.missing.info": "Nema važeće licence", + "license.status.missing.label": "Molimo vas aktivirajte svoju licencu", + "license.status.unknown.info": "The license status is unknown", + "license.status.unknown.label": "Unknown", + "license.manage": "Upravljajte svojom licencom", + "license.purchased": "Kupljeno", + "license.success": "Hvala vam što podržavate Kirby", + "license.unregistered.label": "Neregistrovan", + + "link": "Link", + "link.text": "Tekst veze", + + "loading": "Učitavanje", + + "lock.unsaved": "Nesačuvane promene", + "lock.unsaved.empty": "There are no unsaved changes", + "lock.unsaved.files": "Unsaved files", + "lock.unsaved.pages": "Unsaved pages", + "lock.unsaved.users": "Unsaved accounts", + "lock.isLocked": "Nesačuvane promene {email}", + "lock.unlock": "Otključati", + "lock.unlock.submit": "Otključajte i zamenite nesačuvane promene {email}", + "lock.isUnlocked": "Otključao ga je drugi korisnik", + + "login": "Prijavi se", + "login.code.label.login": "Kod za prijavu", + "login.code.label.password-reset": "Kod za resetovanje lozinke", + "login.code.placeholder.email": "000 000", + "login.code.placeholder.totp": "000000", + "login.code.text.email": "Ako je vaša adresa e-pošte registrovana, traženi kod je poslat putem e-pošte.", + "login.code.text.totp": "Molimo vas unesite jednokratni kod iz vaše aplikacije za autentifikaciju.", + "login.email.login.body": "Zdravo {user.nameOrEmail},\n\nNedavno ste zatražili kod za prijavu na panel {site}.\nSledeći kod za prijavu će biti važećii {timeout} minuta:\n\n{code}\n\nAko niste zahtevali kod za prijavu, zanemarite ovu e-poštu ili kontaktirajte svog administratora ako imate pitanja.\nIz bezbednosnih razloga, NEMOJTE prosleđivati ovu e-poštu.", + "login.email.login.subject": "Vaš kod za prijavu", + "login.email.password-reset.body": "Zdravo {user.nameOrEmail},\n\nNedavno ste zatražili kod za resetovanje lozinke za panel {site}.\nSledeći kod za resetovanje lozinke će biti važeći {timeout} minuta:\n\n{code}\n\nAko niste zahtevali kod za resetovanje lozinke, zanemarite ovu e-poštu ili kontaktirajte svog administratora ako imate pitanja.\nIz bezbednosnih razloga, NEMOJTE prosleđivati ovu e-poštu.", + "login.email.password-reset.subject": "Vaš kod za resetovanje lozinke", + "login.remember": "Ostavi me prijavljenog", + "login.reset": "Resetujte šifru", + "login.toggleText.code.email": "Prijavite se putem e-pošte", + "login.toggleText.code.email-password": "Prijavite se sa lozinkom", + "login.toggleText.password-reset.email": "Zaboravili ste lozinku?", + "login.toggleText.password-reset.email-password": "← Nazad na prijavu", + "login.totp.enable.option": "Podesite jednokratne kodove", + "login.totp.enable.intro": "Aplikacije autentifikacije mogu da generišu jednokratne kodove koji se koriste kao drugi faktor prilikom prijavljivanja na nalog.", + "login.totp.enable.qr.label": "1. Skenirajte ovaj QR kod", + "login.totp.enable.qr.help": "Ne možete da skenirate? Dodajte ključ za podešavanje{secret} manuelno u aplikaciji za autentifikaciju.", + "login.totp.enable.confirm.headline": "2. Potvrdite generisanim kodom", + "login.totp.enable.confirm.text": "Vaša aplikacija generiše novi jednokratni kod svakih 30 sekundi. Unesite trenutni kod da biste završili podešavanje:", + "login.totp.enable.confirm.label": "Trenutni kod", + "login.totp.enable.confirm.help": "Nakon ovog podešavanja, svaki put kada se prijavite tražićemo od vas jednokratni kod.", + "login.totp.enable.success": "Jednokratni kodovi su omogućeni", + "login.totp.disable.option": "Onemogućite jednokratne kodove", + "login.totp.disable.label": "Unesite lozinku da biste onemogućili jednokratne kodove", + "login.totp.disable.help": "U budućnosti, drugi faktor kao što je kod za prijavu poslat putem e-pošte biće zahtevan kada se prijavite. Jednokratne kodove uvek možete ponovo da podesite kasnije.", + "login.totp.disable.admin": "

Ovo će onemogućiti jednokratne kodove za{user}.

U budućnosti, drugi faktor kao što je kod za prijavu poslat putem e-pošte biće zahtevan kada se prijave. {user} može ponovo da podesi jednokratne kodove nakon sledećeg prijavljivanja", + "login.totp.disable.success": "Jednokratni kodovi su onemogućeni", + + "logout": "Odjavi se", + + "merge": "Spojite", + "menu": "Meni", + "meridiem": "AM/PM", + "mime": "Vrsta medija", + "minutes": "Minuti", + + "month": "Mesec", + "months.april": "April", + "months.august": "Avgust", + "months.december": "Decembar", + "months.february": "Februar", + "months.january": "Januar", + "months.july": "Jul", + "months.june": "Jun", + "months.march": "Mart", + "months.may": "Maj", + "months.november": "Novembar", + "months.october": "Oktobar", + "months.september": "Septembar", + + "more": "Više", + "move": "Pomerite", + "name": "Ime", + "next": "Sledeći", + "night": "Noć", + "no": "ne", + "off": "Isključeno", + "on": "Uključeno", + "open": "Otvorite", + "open.newWindow": "Otvorite u novom prozoru", + "option": "Opcija", + "options": "Opcije", + "options.none": "Nema opcija", + "options.all": "Prikaži sve {count} opcije", + + "orientation": "Orijentacija", + "orientation.landscape": "Predeo", + "orientation.portrait": "Portret", + "orientation.square": "Kvadrat", + + "page": "Stranica", + "page.blueprint": "Ova stranica još uvek nema blueprint. Možete definisati podešavanje u /site/blueprints/pages/{blueprint}.yml", + "page.changeSlug": "Promeni URL", + "page.changeSlug.fromTitle": "Napravi od naslova", + "page.changeStatus": "Promenite status", + "page.changeStatus.position": "Molimo izaberite poziciju", + "page.changeStatus.select": "Odaberite novi status", + "page.changeTemplate": "Promenite šablon", + "page.changeTemplate.notice": "Promena šablona stranice će ukloniti sadržaj za polja koja se ne podudaraju po tipu. Koristite sa oprezom.", + "page.create": "Kreirajte kao {status}", + "page.delete.confirm": "Da li zaista želite da izbrišete {title}?", + "page.delete.confirm.subpages": "Ova stranica ima podstranice.
Sve podstranice će takođe biti izbrisane.", + "page.delete.confirm.title": "Unesite naslov stranice da biste potvrdili", + "page.duplicate.appendix": "Kopiraj", + "page.duplicate.files": "Kopirajte fajlove", + "page.duplicate.pages": "Kopirajte stranice", + "page.move": "Premestite stranicu", + "page.sort": "Promena pozicije", + "page.status": "Status", + "page.status.draft": "Nacrt", + "page.status.draft.description": "Stranica je u radnom režimu i vidljiva je samo prijavljenim urednicima ili putem tajne veze", + "page.status.listed": "Javno", + "page.status.listed.description": "Stranica je javna za svakoga", + "page.status.unlisted": "Nenavedeno", + "page.status.unlisted.description": "Stranica je dostupna samo preko URL-a", + + "pages": "Stranice", + "pages.delete.confirm.selected": "Do you really want to delete the selected pages? This action cannot be undone.", + "pages.empty": "Još nema stranica", + "pages.status.draft": "Nacrti", + "pages.status.listed": "Objavljeno", + "pages.status.unlisted": "Neizlistano", + + "pagination.page": "Stranica", + + "password": "Lozinka", + "paste": "Zalepite", + "paste.after": "Zalepite posle", + "paste.success": "{count} zalepljen!", + "pixel": "Piksel", + "plugin": "Dodatak", + "plugins": "Dodaci", + "prev": "Prethodna", + "preview": "Pregled", + + "publish": "Publish", + "published": "Objavljeno", + + "remove": "Ukloniti", + "rename": "Preimenovati", + "renew": "Obnovite", + "replace": "Zameniti", + "replace.with": "Zamenite sa", + "retry": "Probajte ponovo", + "revert": "Vratiti se", + "revert.confirm": "Da li zaista želite da izbrišete sve nesačuvane promene?", + + "role": "Uloga", + "role.admin.description": "Administrator ima sva prava", + "role.admin.title": "Administrator", + "role.all": "Sve", + "role.empty": "Nema korisnika sa ovom ulogom", + "role.description.placeholder": "Nema opisa", + "role.nobody.description": "Ovo je rezervna uloga bez ikakvih dozvola", + "role.nobody.title": "Niko", + + "save": "Sačuvaj", + "saved": "Saved", + "search": "Pretraga", + "searching": "Searching", + "search.min": "Unesite {min} karakter za pretragu", + "search.all": "Prikaži sve {count} rezultate ", + "search.results.none": "Nema rezultata", + + "section.invalid": "Odeljak je nevažeći", + "section.required": "Odeljak je obavezan", + + "security": "Bezbednost", + "select": "Izaberite", + "server": "Server", + "settings": "Podešavanja", + "show": "Prikaži", + "site.blueprint": "Sajt još nema plan. Možete definisati podešavanje u /site/blueprints/site.yml", + "size": "Veličina", + "slug": "URL dodatak", + "sort": "Vrsta", + "sort.drag": "Prevucite da biste sortirali…", + "split": "Razdeliti", + + "stats.empty": "Nema izveštaja", + "status": "Status", + + "system.info.copy": "Copy info", + "system.info.copied": "System info copied", + "system.issues.content": "Čini se da je fascikla sa sadržajem izložena", + "system.issues.eol.kirby": "Vaša instalirana Kirby verzija je stigla do kraja svog životnog veka i neće dobijati dalja bezbednosna ažuriranja", + "system.issues.eol.plugin": "Vaša instalirana verzija { plugin } dodatka je stigla do kraja svog životnog veka i neće dobijati dalja bezbednosna ažuriranja", + "system.issues.eol.php": "Vaše instalirano PHP izdanje { release } je dostiglo kraj svog životnog veka i neće dobijati dalja bezbednosna ažuriranja", + "system.issues.debug": "Otklanjanje grešaka mora biti isključeno u proizvodnji", + "system.issues.git": "Čini se da je .git fascikla izložena", + "system.issues.https": "Preporučujemo HTTPS za sve vaše sajtove", + "system.issues.kirby": "Čini se da je Kirby fascikla izložena", + "system.issues.local": "The site is running locally with relaxed security checks", + "system.issues.site": "Čini se da je fascikla sajta izložena", + "system.issues.vue.compiler": "The Vue template compiler is enabled", + "system.issues.vulnerability.kirby": "Na vašu instalaciju može uticati sledeća ranjivost ({ severity } severity): { description }", + "system.issues.vulnerability.plugin": "Na vašu instalaciju može uticati sledeća ranjivost u { plugin } dodatku ({ severity } severity): { description }", + "system.updateStatus": "Ažuriraj status", + "system.updateStatus.error": "Provera ažuriranja nije uspela", + "system.updateStatus.not-vulnerable": "Nema poznatih ranjivosti", + "system.updateStatus.security-update": "Dostupna besplatna bezbednosna { version } nadogradnja", + "system.updateStatus.security-upgrade": "Nadogradnja { version } sa dostupnim bezbednosnim ispravkama", + "system.updateStatus.unreleased": "Neobjavljena verzija", + "system.updateStatus.up-to-date": "Do datuma", + "system.updateStatus.update": "Dostupno besplatno { version } ažuriranje", + "system.updateStatus.upgrade": "Nadogradnja je { version } dostupna", + + "tel": "Telefon", + "tel.placeholder": "+49123456789", + "template": "Šablon", + + "theme": "Theme", + "theme.light": "Lights on", + "theme.dark": "Lights off", + "theme.automatic": "Match system default", + + "title": "Naslov", + "today": "Danas", + + "toolbar.button.clear": "Očisti formatiranje", + "toolbar.button.code": "Kod", + "toolbar.button.bold": "Bold", + "toolbar.button.email": "Email", + "toolbar.button.headings": "Zaglavlje", + "toolbar.button.heading.1": "Zaglavlje 1", + "toolbar.button.heading.2": "Zaglavlje 2", + "toolbar.button.heading.3": "Zaglavlje 3", + "toolbar.button.heading.4": "Zaglavlje 4", + "toolbar.button.heading.5": "Zaglavlje 5", + "toolbar.button.heading.6": "Zaglavlje 6", + "toolbar.button.italic": "Italic", + "toolbar.button.file": "Datoteka", + "toolbar.button.file.select": "Izaberite datoteku", + "toolbar.button.file.upload": "Otpremite datoteku", + "toolbar.button.link": "Link", + "toolbar.button.paragraph": "Paragraf", + "toolbar.button.strike": "Precrtano", + "toolbar.button.sub": "Subscript", + "toolbar.button.sup": "Superscript", + "toolbar.button.ol": "Naručena lista", + "toolbar.button.underline": "Podvući", + "toolbar.button.ul": "Bullet list", + + "translation.author": "Branko Matić", + "translation.direction": "ltr", + "translation.name": "Srpski", + "translation.locale": "sr_RS@latin", + + "type": "Tip", + + "upload": "Otpremi", + "upload.error.cantMove": "Otpremljena datoteka nije mogla da se premesti", + "upload.error.cantWrite": "Neuspešno prebacivanje datoteka na disk", + "upload.error.default": "Nije moguće otpremiti datoteku", + "upload.error.extension": "Otpremanje datoteke je zaustavljeno ekstenzijom", + "upload.error.formSize": "Otpremljena datoteka premašuje MAX_FILE_SIZE direktivu koja je navedena u obrascu", + "upload.error.iniPostSize": "Otpremljena datoteka premašuje post_max_size direktivu u php.ini", + "upload.error.iniSize": "Otpremljena datoteka premašuje upload_max_filesize direktivu u php.ini", + "upload.error.noFile": "Nijedna datoteka nije otpremljena", + "upload.error.noFiles": "Nijedna datoteka nije otpremljena", + "upload.error.partial": "Otpremljena datoteka je samo delimično otpremljena", + "upload.error.tmpDir": "Nedostaje privremena fascikla", + "upload.errors": "Greška", + "upload.progress": "Otpremanje…", + + "url": "Url", + "url.placeholder": "https://example.com", + + "user": "Korisnik", + "user.blueprint": "Možete definisati dodatne odeljke i polja obrasca za ovu korisničku ulogu usite/blueprints/users/{blueprint}.yml", + "user.changeEmail": "Promenite E-mail", + "user.changeLanguage": "Promenite jezik", + "user.changeName": "Preimenujte ovog korisnika", + "user.changePassword": "Promenite lozinku", + "user.changePassword.current": "Your current password", + "user.changePassword.new": "Nova lozinka", + "user.changePassword.new.confirm": "Potvrdite novu lozinku…", + "user.changeRole": "Promenite ulogu", + "user.changeRole.select": "Izaberite novu ulogu", + "user.create": "Dodajte novog korisnika", + "user.delete": "Izbrišite ovog korisnika", + "user.delete.confirm": "Da li zaista želite da izbrišete
{email}?", + + "users": "Korisnici", + + "version": "Verzija", + "version.changes": "Changed version", + "version.compare": "Compare versions", + "version.current": "Trenutna verzija", + "version.latest": "Najnovija verzija", + "versionInformation": "Informacije o verziji", + + "view": "View", + "view.account": "Tvoj nalog", + "view.installation": "Instalacija", + "view.languages": "Jezici", + "view.resetPassword": "Resetujte šifru", + "view.site": "Sajt", + "view.system": "Sistem", + "view.users": "Korisnici", + + "welcome": "Dobrodošli", + "year": "Godina", + "yes": "Da" +} diff --git a/kirby/i18n/translations/sv_SE.json b/kirby/i18n/translations/sv_SE.json index 91b0971..53ac863 100644 --- a/kirby/i18n/translations/sv_SE.json +++ b/kirby/i18n/translations/sv_SE.json @@ -98,17 +98,17 @@ "error.content.lock.replace": "Versionen är låst och kan inte bytas ut", "error.content.lock.update": "Versionen är låst och kan inte uppdateras", - "error.entries.max.plural": "You must not add more than {max} entries", - "error.entries.max.singular": "You must not add more than one entry", - "error.entries.min.plural": "You must add at least {min} entries", - "error.entries.min.singular": "You must add at least one entry", - "error.entries.supports": "\"{type}\" field type is not supported for the entries field", + "error.entries.max.plural": "Du får inte lägga till fler än {max} poster", + "error.entries.max.singular": "Du får inte lägga till mer än en post", + "error.entries.min.plural": "Du måste lägga till minst {min} poster", + "error.entries.min.singular": "Du måste lägga till minst en post", + "error.entries.supports": "Fälttypen \"{type}\" stöds inte för fältet \"entries\"", "error.entries.validation": "Det finns ett fel i fältet \"{field}\" i rad {index}", "error.email.preset.notFound": "E-postförinställningen \"{name}\" kan inte hittas", "error.field.converter.invalid": "Ogiltig omvandlare \"{converter}\"", - "error.field.link.options": "Invalid options: {options}", + "error.field.link.options": "Ogiltiga alternativ: {options}", "error.field.type.missing": "Fältet \"{ name }\": Fälttypen \"{ type }\" finns inte", "error.file.changeName.empty": "Namnet får inte vara tomt", @@ -116,7 +116,7 @@ "error.file.changeTemplate.invalid": "Mallen för filen \"{id}\" kan inte ändras till \"{template}\" (giltiga mallar: \"{blueprints}\")", "error.file.changeTemplate.permission": "Du saknar behörighet för att ändra mallen för filen \"{id}\"", - "error.file.delete.multiple": "Not all files could be deleted. Try each remaining file individually to see the specific error that prevents deletion.", + "error.file.delete.multiple": "Alla filer kunde inte raderas. Prova varje återstående fil individuellt för att se det specifika felet som förhindrar radering.", "error.file.duplicate": "En fil med namnet \"{filename}\" existerar redan", "error.file.extension.forbidden": "Filändelsen \"{extension}\" är inte tillåten", "error.file.extension.invalid": "Ogiltig filändelse: {extension}", @@ -179,7 +179,7 @@ "error.page.delete": "Sidan \"{slug}\" kan inte raderas", "error.page.delete.confirm": "Fyll i sidans titel för att bekräfta", "error.page.delete.hasChildren": "Sidan har undersidor och kan inte raderas", - "error.page.delete.multiple": "Not all pages could be deleted. Try each remaining page individually to see the specific error that prevents deletion.", + "error.page.delete.multiple": "Alla sidor kunde inte raderas. Prova varje återstående sida individuellt för att se det specifika felet som förhindrar radering.", "error.page.delete.permission": "Du har inte behörighet att radera \"{slug}\"", "error.page.draft.duplicate": "Ett utkast med URL-appendixen \"{slug}\" existerar redan", "error.page.duplicate": "En sida med URL-appendixen \"{slug}\" existerar redan", @@ -394,7 +394,7 @@ "file.sort": "Ändra position", "files": "Filer", - "files.delete.confirm.selected": "Do you really want to delete the selected files? This action cannot be undone.", + "files.delete.confirm.selected": "Vill du verkligen ta bort de markerade filerna? Denna åtgärd kan inte ångras.", "files.empty": "Inga filer än", "filter": "Filter", @@ -449,7 +449,12 @@ "language.variables.empty": "Inga översättningar ännu", "language.variable.delete.confirm": "Vill du verkligen ta bort variabeln för {key}?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", "language.variable.key": "Nyckel", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", "language.variable.notFound": "Variabeln kunde inte hittas", "language.variable.value": "Värde", @@ -482,7 +487,7 @@ "license.status.missing.info": "Ingen giltig licens", "license.status.missing.label": "Vänligen aktivera din licens", "license.status.unknown.info": "Licensstatusen är okänd", - "license.status.unknown.label": "Unknown", + "license.status.unknown.label": "Okänd", "license.manage": "Hantera dina licenser", "license.purchased": "Köpt", "license.success": "Tack för att du stödjer Kirby", @@ -604,7 +609,7 @@ "page.status.unlisted.description": "Sidan är endast åtkomlig via URL", "pages": "Sidor", - "pages.delete.confirm.selected": "Do you really want to delete the selected pages? This action cannot be undone.", + "pages.delete.confirm.selected": "Vill du verkligen ta bort de valda sidorna? Denna åtgärd kan inte ångras.", "pages.empty": "Inga sidor än", "pages.status.draft": "Utkast", "pages.status.listed": "Publicerade", @@ -679,9 +684,9 @@ "system.issues.git": "Mappen .git verkar vara exponerad", "system.issues.https": "Vi rekommenderar HTTPS för alla dina webbplatser", "system.issues.kirby": "Mappen kirby verkar vara exponerad", - "system.issues.local": "The site is running locally with relaxed security checks", + "system.issues.local": "Sajten drivs lokalt med förenklade säkerhetskontroller", "system.issues.site": "Mappen site verkar vara exponerad", - "system.issues.vue.compiler": "The Vue template compiler is enabled", + "system.issues.vue.compiler": "Mallkompilatorn för Vue är aktiverad", "system.issues.vulnerability.kirby": "Din installation kan vara påverkad av följande sårbarhet ({ severity } allvarlighetsgrad): { description }", "system.issues.vulnerability.plugin": "Din installation kan vara påverkad av följande sårbarhet i tillägget { plugin } ({ severity } allvarlighetsgrad): { description }", "system.updateStatus": "Uppdateringsstatus", @@ -761,7 +766,7 @@ "user.changeLanguage": "Ändra språk", "user.changeName": "Byt namn på denna användare", "user.changePassword": "Ändra lösenord", - "user.changePassword.current": "Your current password", + "user.changePassword.current": "Ditt nuvarande lösenord", "user.changePassword.new": "Nytt lösenord", "user.changePassword.new.confirm": "Bekräfta det nya lösenordet...", "user.changeRole": "Ändra roll", diff --git a/kirby/i18n/translations/tr.json b/kirby/i18n/translations/tr.json index 9684444..2838b7d 100644 --- a/kirby/i18n/translations/tr.json +++ b/kirby/i18n/translations/tr.json @@ -449,7 +449,12 @@ "language.variables.empty": "Henüz çeviri yok", "language.variable.delete.confirm": "Gerçekten {key} değişkenini silmek istiyor musunuz?", + "language.variable.entries": "Değerler", + "language.variable.entries.help": "Her dize, eşleşen sayısı için kullanılacaktır, örneğin üç dize 0, 1, 2 ve daha fazla sayım için eşleşecektir. Gerçek sayıyı eklemek için {count} yer tutucusunu kullanın.", "language.variable.key": "Anahtar", + "language.variable.multiple": "Sayılabilir mi?", + "language.variable.multiple.text": "Farklı çeviri dizeleri kullanın", + "language.variable.multiple.help": "Dil değişkeniyle birlikte ilettiğiniz sayıma bağlı olarak farklı değerler kullanabilir, böylece tekil ve çoğul gibi dinamik çeviriler oluşturabilirsiniz.", "language.variable.notFound": "Değişken bulunamadı", "language.variable.value": "Değer", diff --git a/kirby/i18n/translations/zh_TW.json b/kirby/i18n/translations/zh_TW.json new file mode 100644 index 0000000..675c501 --- /dev/null +++ b/kirby/i18n/translations/zh_TW.json @@ -0,0 +1,799 @@ +{ + "account.changeName": "變更帳號名稱", + "account.delete": "刪除帳號", + "account.delete.confirm": "你確定要刪除這個帳號嗎?", + + "activate": "啟用", + "add": "\u65b0\u589e", + "alpha": "字母順序", + "author": "作者", + "avatar": "\u4f7f\u7528\u8005\u7167\u7247", + "back": "返回", + "cancel": "\u53d6\u6d88", + "change": "\u8b8a\u66f4", + "close": "\u95dc\u9589", + "changes": "變更", + "confirm": "儲存", + "collapse": "收合", + "collapse.all": "全部收合", + "color": "顏色", + "coordinates": "座標", + "copy": "Copy", + "copy.all": "全部複製", + "copy.success": "複製成功", + "copy.success.multiple": "{count} 資料已複製", + "copy.url": "複製網址", + "create": "建立", + "custom": "自訂", + + "date": "日期", + "date.select": "選擇日期", + + "day": "日", + "days.fri": "\u4e94", + "days.mon": "\u4e00", + "days.sat": "\u516d", + "days.sun": "\u65e5", + "days.thu": "\u56db", + "days.tue": "\u4e8c", + "days.wed": "\u4e09", + + "debugging": "除錯中", + + "delete": "\u522a\u9664", + "delete.all": "全部刪除", + + "dialog.fields.empty": "沒有可用的欄位", + "dialog.files.empty": "沒有可用的檔案", + "dialog.pages.empty": "沒有可用的頁面", + "dialog.text.empty": "沒有可用的文字", + "dialog.users.empty": "沒有可用的使用者", + + "dimensions": "尺寸", + "disable": "停用", + "disabled": "已停用", + "discard": "\u653e\u68c4", + + "drawer.fields.empty": "沒有欄位可顯示", + + "domain": "網域", + "download": "下載", + "duplicate": "建立副本", + + "edit": "\u7de8\u8f2f", + + "email": "電子郵件", + "email.placeholder": "mail@example.com", + + "enter": "輸入", + "entries": "資料項目", + "entry": "進入", + + "environment": "環境", + + "error": "錯誤", + "error.access.code": "無效的存取碼", + "error.access.login": "請先登入", + "error.access.panel": "你沒有進入控制台的權限", + "error.access.view": "你沒有瀏覽這個項目的權限", + + "error.avatar.create.fail": "無法建立使用者照片", + "error.avatar.delete.fail": "\u7121\u6cd5\u522a\u9664\u4f7f\u7528\u8005\u7167\u7247", + "error.avatar.dimensions.invalid": "請將個人檔案圖片的寬度和高度控製在 3000 畫素以下", + "error.avatar.mime.forbidden": "\u88ab\u7981\u6b62\u7684 mime \u985e\u578b", + + "error.blueprint.notFound": "無法載入藍圖「{name}」", + + "error.blocks.max.plural": "最多只能加入 {max} 個區塊", + "error.blocks.max.singular": "最多只能加入 1 個區塊", + "error.blocks.min.plural": "至少需要 {min} 個區塊", + "error.blocks.min.singular": "至少需要 1 個區塊", + "error.blocks.validation": "使用「{fieldset}」區塊類型的區塊 {index} 中的「{field}」欄位出錯", + + "error.cache.type.invalid": "無效快取類型 \"{type}\"", + + "error.content.lock.delete": "內容鎖定中,無法刪除", + "error.content.lock.move": "內容鎖定中,無法移動", + "error.content.lock.publish": "內容鎖定中,無法發佈", + "error.content.lock.replace": "內容鎖定中,無法替換", + "error.content.lock.update": "內容鎖定中,無法更新", + + "error.entries.max.plural": "最多只能加入 {max} 筆資料", + "error.entries.max.singular": "最多只能加入 1 筆資料", + "error.entries.min.plural": "至少需要 {min} 筆資料", + "error.entries.min.singular": "至少需要 1 筆資料", + "error.entries.supports": "「{type}」欄位類型不支援指定的資料類型", + "error.entries.validation": "行 {index} 中的「{field}」欄位出錯。", + + "error.email.preset.notFound": "找不到電子信箱預設設定「{name}」", + + "error.field.converter.invalid": "欄位轉換無效「{converter}」", + "error.field.link.options": "連結欄位的選項格式錯誤:「{options}」", + "error.field.type.missing": "欄位「{ name }」:欄位類型「{ type }」不存在", + + "error.file.changeName.empty": "請輸入新的檔名", + "error.file.changeName.permission": "你沒有變更「{filename}」檔名的權限", + "error.file.changeTemplate.invalid": "檔案「{id}」的樣板無法變更為「{template}」(有效:「{blueprints}」)。", + "error.file.changeTemplate.permission": "你沒有變更「{id}」樣板的權限", + + "error.file.delete.multiple": "刪除多個檔案時發生錯誤", + "error.file.duplicate": "檔案「{filename}」重複", + "error.file.extension.forbidden": "\u88ab\u7981\u6b62\u7684\u526f\u6a94\u540d", + "error.file.extension.invalid": "無效的副檔名:{extension}", + "error.file.extension.missing": "檔案「{filename}」沒有副檔名", + "error.file.maxheight": "檔案高度不能超過 {max} 像素", + "error.file.maxsize": "檔案太大", + "error.file.maxwidth": "檔案寬度不能超過 {max} 像素", + "error.file.mime.differs": "上傳的檔案必須是相同的 mime 類型「{mime}」", + "error.file.mime.forbidden": "不允許使用媒體類型「{mime}」。", + "error.file.mime.invalid": "無效的 MIME 類型:「{mime}」", + "error.file.mime.missing": "無法偵測「{filename}」檔案的媒體類型", + "error.file.minheight": "檔案高度不能小於 {min} 像素", + "error.file.minsize": "檔案太小", + "error.file.minwidth": "檔案寬度不能小於 {min} 像素", + "error.file.name.unique": "檔名已經存在", + "error.file.name.missing": "請輸入檔名", + "error.file.notFound": "\u627e\u4e0d\u5230\u6a94\u6848", + "error.file.orientation": "影像的方向必須是「{orientation}」", + "error.file.sort.permission": "你沒有變更「{filename}」排序的權限", + "error.file.type.forbidden": "此「{type}」的檔案不允許上傳", + "error.file.type.invalid": "無效的檔案類型:{filename}", + "error.file.undefined": "\u627e\u4e0d\u5230\u6a94\u6848", + + "error.form.incomplete": "表單尚未填寫完成", + "error.form.notSaved": "表單無法儲存,請檢查是否有錯誤", + + "error.language.code": "語言代碼無效", + "error.language.create.permission": "你沒有新增語言的權限", + "error.language.delete.permission": "你沒有刪除語言的權限", + "error.language.duplicate": "語言已經存在", + "error.language.name": "語言名稱無效", + "error.language.notFound": "找不到語言", + "error.language.update.permission": "你沒有變更語言設定的權限", + + "error.layout.validation.block": "在版面組態第 {layoutIndex} 區塊中,使用「{fieldset}」區塊類型的第 {blockIndex} 區塊內,欄位「{field}」發生錯誤", + "error.layout.validation.settings": "第 {index} 個版面組態的設定有誤", + + "error.license.domain": "授權的網域名稱無效或不符", + "error.license.email": "Please enter a valid email address", + "error.license.format": "授權碼格式錯誤", + "error.license.verification": "授權驗證失敗", + + "error.login.totp.confirm.invalid": "驗證碼無效,請重新確認", + "error.login.totp.confirm.missing": "請輸入驗證碼", + + "error.object.validation": "欄位「{label}」有錯誤:\n{message}", + + "error.offline": "系統目前離線,請稍後再試", + + "error.page.changeSlug.permission": "\u7121\u6cd5\u66f4\u6539\u9801\u9762 URL", + "error.page.changeSlug.reserved": "頂層頁面的路徑不得以「{path}」作為開頭", + "error.page.changeStatus.incomplete": "請填寫所有必要欄位後再變更狀態", + "error.page.changeStatus.permission": "你沒有變更頁面狀態的權限", + "error.page.changeStatus.toDraft.invalid": "頁面「{slug}」無法轉換為草稿狀態", + "error.page.changeTemplate.invalid": "頁面「{slug}」的樣板無法變更", + "error.page.changeTemplate.permission": "你沒有變更「{slug}」樣板的權限", + "error.page.changeTitle.empty": "請輸入頁面標題", + "error.page.changeTitle.permission": "你沒有變更「{slug}」標題的權限", + "error.page.create.permission": "你沒有建立「{slug}」標題的權限", + "error.page.delete": "無法刪除頁面「{slug}」", + "error.page.delete.confirm": "你確定要刪除這個頁面嗎?", + "error.page.delete.hasChildren": "此頁面下有子頁面,請先刪除子頁面", + "error.page.delete.multiple": "刪除多個頁面時發生錯誤", + "error.page.delete.permission": "你沒有刪除「{slug}」的權限", + "error.page.draft.duplicate": "已經有草稿頁面使用「{slug}」作為網址附加碼", + "error.page.duplicate": "已有使用網址附加碼「{slug}」的頁面存在", + "error.page.duplicate.permission": "你沒有複製「{slug}」的權限", + "error.page.move.ancestor": "無法移動到其子孫頁面下", + "error.page.move.directory": "移動頁面失敗,資料夾錯誤", + "error.page.move.duplicate": "已有使用網址附加碼「{slug}」的子頁面存在", + "error.page.move.noSections": "頁面「{parent}」因藍圖中未包含任何頁面區段,無法成為其他頁面的上層頁面", + "error.page.move.notFound": "找不到要移動的頁面", + "error.page.move.permission": "你沒有移動「{slug}」的權限", + "error.page.move.template": "樣板「{template}」不被允許作為「{parent}」的子頁面", + "error.page.notFound": "\u627e\u4e0d\u5230\u9801\u9762", + "error.page.num.invalid": "頁面排序編號無效", + "error.page.slug.invalid": "頁面網址無效,只能使用小寫英數、連字號與底線", + "error.page.slug.maxlength": "網址附加碼長度必須少於 {length} 個字元", + "error.page.sort.permission": "頁面「{slug}」無法進行排序", + "error.page.status.invalid": "頁面狀態無效", + "error.page.undefined": "\u627e\u4e0d\u5230\u9801\u9762", + "error.page.update.permission": "你沒有更新「{slug}」的權限", + + "error.section.files.max.plural": "「{section}」區段中最多只能加入 {max} 個檔案", + "error.section.files.max.singular": "「{section}」區段中最多只能加入 1 個檔案", + "error.section.files.min.plural": "「{section}」區段中至少需要 {min} 個檔案", + "error.section.files.min.singular": "「{section}」區段中至少需要 1 個檔案", + + "error.section.pages.max.plural": "「{section}」區段中最多只能加入 {max} 個頁面", + "error.section.pages.max.singular": "「{section}」區段中最多只能加入 1 個頁面", + "error.section.pages.min.plural": "「{section}」區段中至少需要 {min} 個頁面", + "error.section.pages.min.singular": "「{section}」區段中至少需要 1 個頁面", + + "error.section.notLoaded": "無法載入「{name}」區段", + "error.section.type.invalid": "區段類型「{type}」無效", + + "error.site.changeTitle.empty": "網站標題不得為空", + "error.site.changeTitle.permission": "你沒有變更網站標題的權限", + "error.site.update.permission": "你沒有變更網站設定的權限", + + "error.structure.validation": "第 {index} 列的「{field}」欄位發生錯誤", + + "error.template.default.notFound": "找不到預設樣板", + + "error.unexpected": "發生未預期的錯誤!如需更多資訊,請啟用除錯模式:https://getkirby.com/docs/reference/system/options/debug", + + "error.user.changeEmail.permission": "你沒有變更使用者「{name}」電子郵件的權限", + "error.user.changeLanguage.permission": "你沒有變更使用者「{name}」語言的權限", + "error.user.changeName.permission": "你沒有變更使用者「{name}」名稱的權限", + "error.user.changePassword.permission": "你沒有變更使用者「{name}」密碼的權限", + "error.user.changeRole.lastAdmin": "無法取消最後一位管理員的權限", + "error.user.changeRole.permission": "你沒有變更使用者「{name}」角色的權限", + "error.user.changeRole.toAdmin": "你無法將自己升級為管理員", + "error.user.create.permission": "你沒有新增使用者的權限", + "error.user.delete": "\u8a72\u4f7f\u7528\u8005\u4e0d\u53ef\u88ab\u522a\u9664", + "error.user.delete.lastAdmin": "\u4f60\u7121\u6cd5\u522a\u9664\u6700\u5f8c\u7684\u7ba1\u7406\u8005", + "error.user.delete.lastUser": "無法刪除最後一位使用者", + "error.user.delete.permission": "\u4f60\u7121\u6cd5\u4fee\u6539\u6b64\u4f7f\u7528\u8005", + "error.user.duplicate": "已有使用者使用電子郵件位址「{email}」", + "error.user.email.invalid": "Please enter a valid email address", + "error.user.language.invalid": "無效的語言代碼", + "error.user.notFound": "\u627e\u4e0d\u5230\u4f7f\u7528\u8005", + "error.user.password.excessive": "請輸入有效的密碼。密碼長度不得超過 1000 個字元。", + "error.user.password.invalid": "請輸入有效的密碼。密碼長度至少需為 8 個字元。", + "error.user.password.notSame": "\u8acb\u78ba\u8a8d\u5bc6\u78bc\u7121\u8aa4", + "error.user.password.undefined": "請輸入密碼", + "error.user.password.wrong": "密碼錯誤", + "error.user.role.invalid": "權限設定無效", + "error.user.undefined": "找不到使用者", + "error.user.update.permission": "你沒有更新使用者「{name}」的權限", + + "error.validation.accepted": "請勾選此選項", + "error.validation.alpha": "只能包含英文字母", + "error.validation.alphanum": "僅能輸入 a-z 的英文字母或數字 0-9", + "error.validation.anchor": "無效的錨點格式", + "error.validation.between": "必須介於 {min} 到 {max} 之間", + "error.validation.boolean": "請選擇是或否", + "error.validation.color": "請輸入有效的顏色,格式需為 {format}", + "error.validation.contains": "必須包含「{value}」", + "error.validation.date": "無效的日期格式", + "error.validation.date.after": "日期必須晚於 {date}", + "error.validation.date.before": "日期必須早於 {date}", + "error.validation.date.between": "日期必須介於 {min} 到 {max} 之間", + "error.validation.denied": "不允許的值", + "error.validation.different": "此欄位必須與 {other} 不同", + "error.validation.email": "Please enter a valid email address", + "error.validation.endswith": "必須以「{value}」結尾", + "error.validation.filename": "無效的檔名", + "error.validation.in": "請輸入以下其中一項:({in})", + "error.validation.integer": "請輸入整數", + "error.validation.ip": "請輸入有效的 IP 位址", + "error.validation.less": "數值必須小於 {max}", + "error.validation.linkType": "無效的連結類型", + "error.validation.match": "格式不正確", + "error.validation.max": "數值不得超過 {max}", + "error.validation.maxlength": "請輸入較短的內容(最多 {max} 個字元)", + "error.validation.maxwords": "請輸入不超過 {max} 個詞語 (words)", + "error.validation.min": "數值不得小於 {min}", + "error.validation.minlength": "請輸入較長的內容(至少 {min} 個字元)", + "error.validation.minwords": "請輸入至少 {min} 個詞語(words)", + "error.validation.more": "數值必須大於 {min}", + "error.validation.notcontains": "不得包含「{value}」", + "error.validation.notin": "請不要輸入以下任一項:({notIn})", + "error.validation.option": "請選擇有效的選項", + "error.validation.num": "請輸入數字", + "error.validation.required": "此欄位為必填", + "error.validation.same": "此欄位必須與 {other} 相同", + "error.validation.size": "大小必須為 {size}", + "error.validation.startswith": "必須以「{value}」開頭", + "error.validation.tel": "請輸入有效的電話號碼", + "error.validation.time": "無效的時間格式", + "error.validation.time.after": "時間必須晚於 {time}", + "error.validation.time.before": "時間必須早於 {time}", + "error.validation.time.between": "時間必須介於 {min} 到 {max} 之間", + "error.validation.uuid": "請輸入有效的 UUID", + "error.validation.url": "請輸入有效的網址", + + "expand": "展開", + "expand.all": "全部展開", + + "field.invalid": "欄位無效", + "field.required": "此欄位為必填", + "field.blocks.changeType": "變更區塊類型", + "field.blocks.code.name": "程式碼", + "field.blocks.code.language": "慣用語言", + "field.blocks.code.placeholder": "輸入程式碼…", + "field.blocks.delete.confirm": "你確定要刪除這個區塊嗎?", + "field.blocks.delete.confirm.all": "你確定要刪除所有區塊嗎?", + "field.blocks.delete.confirm.selected": "你確定要刪除已選取的區塊嗎?", + "field.blocks.empty": "尚未加入任何區塊", + "field.blocks.fieldsets.empty": "沒有可用的區塊類型", + "field.blocks.fieldsets.label": "新增區塊", + "field.blocks.fieldsets.paste": "按下 {{shortcut}} 可從剪貼簿匯入版面/區塊,僅會插入目前欄位允許的區塊類型。", + "field.blocks.gallery.name": "圖集", + "field.blocks.gallery.images.empty": "尚未加入圖片", + "field.blocks.gallery.images.label": "圖片", + "field.blocks.heading.level": "標題層級", + "field.blocks.heading.name": "標題", + "field.blocks.heading.text": "標題文字", + "field.blocks.heading.placeholder": "輸入標題…", + "field.blocks.figure.back.plain": "純色背景", + "field.blocks.figure.back.pattern.light": "圖樣(亮色)", + "field.blocks.figure.back.pattern.dark": "圖樣(暗色)", + "field.blocks.image.alt": "替代文字", + "field.blocks.image.caption": "圖片說明", + "field.blocks.image.crop": "裁切", + "field.blocks.image.link": "連結", + "field.blocks.image.location": "圖片位置", + "field.blocks.image.location.internal": "內部上傳", + "field.blocks.image.location.external": "外部連結", + "field.blocks.image.name": "圖片", + "field.blocks.image.placeholder": "拖曳或點擊以選擇圖片", + "field.blocks.image.ratio": "顯示比例", + "field.blocks.image.url": "圖片網址", + "field.blocks.line.name": "分隔線", + "field.blocks.list.name": "清單", + "field.blocks.markdown.name": "Markdown", + "field.blocks.markdown.label": "內容", + "field.blocks.markdown.placeholder": "輸入 Markdown 內容…", + "field.blocks.quote.name": "引言", + "field.blocks.quote.text.label": "引言內容", + "field.blocks.quote.text.placeholder": "輸入引言文字…", + "field.blocks.quote.citation.label": "出處", + "field.blocks.quote.citation.placeholder": "輸入引用來源…", + "field.blocks.text.name": "段落", + "field.blocks.text.placeholder": "輸入段落內容…", + "field.blocks.video.autoplay": "自動播放", + "field.blocks.video.caption": "影片說明", + "field.blocks.video.controls": "顯示控制列", + "field.blocks.video.location": "影片位置", + "field.blocks.video.loop": "重複播放", + "field.blocks.video.muted": "靜音", + "field.blocks.video.name": "影片", + "field.blocks.video.placeholder": "貼上影片網址或拖曳影片", + "field.blocks.video.poster": "預覽縮圖", + "field.blocks.video.preload": "預先載入", + "field.blocks.video.url.label": "影片網址", + "field.blocks.video.url.placeholder": "https://youtube.com/?v=", + + "field.entries.delete.confirm.all": "你確定要刪除所有資料嗎?", + "field.entries.empty": "還沒有資料", + + "field.files.empty": "沒有選取任何檔案", + "field.files.empty.single": "尚未選取檔案", + + "field.layout.change": "變更版面配置", + "field.layout.delete": "刪除版面", + "field.layout.delete.confirm": "你確定要刪除這個版面嗎?", + "field.layout.delete.confirm.all": "你確定要刪除所有版面嗎?", + "field.layout.empty": "尚未設定任何版面", + "field.layout.select": "選擇版面", + + "field.object.empty": "尚未填寫內容", + + "field.pages.empty": "沒有選取任何頁面", + "field.pages.empty.single": "尚未選取頁面", + + "field.structure.delete.confirm": "\u4f60\u771f\u7684\u8981\u522a\u9664\u6b64\u7b46\u8cc7\u6599\u55ce\uff1f", + "field.structure.delete.confirm.all": "你確定要刪除所有資料嗎?", + "field.structure.empty": "尚未加入任何資料", + + "field.users.empty": "沒有選取任何使用者", + "field.users.empty.single": "尚未選取使用者", + + "fields.empty": "此頁面沒有設定欄位", + + "file": "檔案", + "file.blueprint": "此檔案尚未設定藍圖。你可以在 /site/blueprints/files/{blueprint}.yml 中定義設定內容", + "file.changeTemplate": "變更樣板", + "file.changeTemplate.notice": "變更樣板可能會導致資料遺失", + "file.delete.confirm": "\u78ba\u8a8d\u522a\u9664\u6a94\u6848\uff1f", + "file.focus.placeholder": "選取聚焦區域", + "file.focus.reset": "重設焦點", + "file.focus.title": "圖片焦點", + "file.sort": "變更檔案順序", + + "files": "附加檔案", + "files.delete.confirm.selected": "你確定要刪除已選取的檔案嗎?", + "files.empty": "此處沒有檔案", + + "filter": "篩選", + + "form.discard": "放棄變更", + "form.discard.confirm": "你確定要放棄未儲存的變更嗎?", + "form.locked": "此表單已鎖定,無法編輯", + "form.unsaved": "尚有未儲存的變更", + "form.preview": "預覽內容", + "form.preview.draft": "預覽草稿", + + "hide": "隱藏", + "hour": "時", + "hue": "色相", + "import": "匯入", + "info": "資訊", + "insert": "\u63d2\u5165", + "insert.after": "插入在後", + "insert.before": "插入在前", + "install": "安裝", + + "installation": "安裝", + "installation.completed": "安裝完成", + "installation.disabled": "安裝功能已停用", + "installation.issues.accounts": "\u60a8\u6c92\u6709\u300c\/site\/accounts\u300d\u8cc7\u6599\u593e\u7684\u4fee\u6539\u6b0a\u9650", + "installation.issues.content": "\u60a8\u6c92\u6709\u300c\/content\u300d\u8cc7\u6599\u593e\u7684\u4fee\u6539\u6b0a\u9650", + "installation.issues.curl": "伺服器未啟用 cURL,可能會導致某些功能無法使用", + "installation.issues.headline": "請先解決下列安裝問題:", + "installation.issues.mbstring": "PHP 尚未啟用 mbstring 擴充套件", + "installation.issues.media": "無法建立 /media 資料夾或寫入權限不足", + "installation.issues.php": "請確保使用 PHP 8 以上版本", + "installation.issues.sessions": "PHP sessions 未正確啟用,請檢查伺服器設定", + + "language": "\u6163\u7528\u8a9e\u8a00", + "language.code": "語言代碼", + "language.convert": "轉換語言", + "language.convert.confirm": "你確定要將所有內容轉換為此語言嗎?你確定要將「{name}」轉換為預設語言嗎?此操作無法還原。\n如果「{name}」中有未翻譯的內容,將不會有可用的預設語言做為備援,可能會導致網站部份內容為空。", + "language.create": "新增語言", + "language.default": "預設語言", + "language.delete.confirm": "你確定要刪除語言「{name}」及其所有翻譯內容嗎?此操作無法還原!", + "language.deleted": "語言已刪除", + "language.direction": "書寫方向", + "language.direction.ltr": "由左至右", + "language.direction.rtl": "由右至左", + "language.locale": "PHP 語系字串", + "language.locale.warning": "請確認區域設定符合 PHP 認可的格式", + "language.name": "語言名稱", + "language.secondary": "次要語言", + "language.settings": "語言設定", + "language.updated": "語言已更新", + "language.variables": "語言變數", + "language.variables.empty": "尚未設定語言變數", + + "language.variable.delete.confirm": "你確定要刪除「{key}」這個變數嗎?", + "language.variable.entries": "Values", + "language.variable.entries.help": "Each string will be used for its matching count, e.g. three strings will match in order to counts 0, 1, 2 and more. Use the {count} placeholder to insert the actual count.", + "language.variable.key": "變數名稱", + "language.variable.multiple": "Countable?", + "language.variable.multiple.text": "Use different translation strings", + "language.variable.multiple.help": "You can use different values depending on a count you pass along with the language variable, allowing you to create dynamic translations, e.g. singular and plural.", + "language.variable.notFound": "找不到指定的語言變數", + "language.variable.value": "變數內容", + + "languages": "語言清單", + "languages.default": "預設語言", + "languages.empty": "尚未設定語言", + "languages.secondary": "次要語言清單", + "languages.secondary.empty": "尚未設定次要語言", + + "license": "Kirby \u6191\u8b49", + "license.activate": "啟用授權", + "license.activate.label": "輸入您的授權碼以啟用 Kirby", + "license.activate.domain": "你的授權將會啟用於 {host}", + "license.activate.local": "你即將為本機網域 {host} 啟用你的 Kirby 授權。\n如果這個網站將部署到公開網域,請改為在公開網域上啟用授權。\n如果 {host} 就是你要使用授權的網域,請繼續操作。", + "license.activated": "授權已啟用", + "license.buy": "購買授權", + "license.code": "授權碼", + "license.code.help": "您可以在購買確認信中找到授權碼", + "license.code.label": "輸入授權碼", + "license.status.active.info": "包含至 {date} 前的新主要版本", + "license.status.active.label": "已啟用", + "license.status.demo.info": "此為試用版安裝,僅供開發或測試使用", + "license.status.demo.label": "試用中", + "license.status.inactive.info": "此網站尚未啟用授權", + "license.status.inactive.label": "未啟用", + "license.status.legacy.bubble": "舊版授權", + "license.status.legacy.info": "此授權使用的是舊版授權機制", + "license.status.legacy.label": "舊版授權", + "license.status.missing.bubble": "缺少授權", + "license.status.missing.info": "請輸入有效授權碼以使用 Kirby", + "license.status.missing.label": "未授權", + "license.status.unknown.info": "無法確認授權狀態,請檢查您的網路連線", + "license.status.unknown.label": "未知狀態", + "license.manage": "管理授權", + "license.purchased": "您已購買授權", + "license.success": "授權啟用成功", + "license.unregistered.label": "未註冊", + + "link": "\u9023\u7d50", + "link.text": "\u9023\u7d50\u6587\u5b57", + + "loading": "載入中…", + + "lock.unsaved": "有尚未儲存的變更", + "lock.unsaved.empty": "所有變更已儲存", + "lock.unsaved.files": "有檔案變更尚未儲存", + "lock.unsaved.pages": "有頁面變更尚未儲存", + "lock.unsaved.users": "有使用者變更尚未儲存", + "lock.isLocked": "{email} 尚未儲存的變更", + "lock.unlock": "解除鎖定", + "lock.unlock.submit": "解鎖並覆蓋 {email} 尚未儲存的變更", + "lock.isUnlocked": "目前已解除鎖定", + + "login": "登入", + "login.code.label.login": "使用一次性登入碼登入", + "login.code.label.password-reset": "重設密碼的安全碼", + "login.code.placeholder.email": "000 000", + "login.code.placeholder.totp": "000000", + "login.code.text.email": "我們已寄送一組登入連結至你的電子信箱", + "login.code.text.totp": "請輸入兩步驟驗證碼", + "login.email.login.body": "嗨 {user.nameOrEmail},\n\n你最近請求了 {site} 控製臺的登入驗證碼。\n以下驗證碼在 {timeout} 分鐘內有效:\n\n{code}\n\n如果你並未請求此驗證碼,請忽略此封信;如有疑問,請聯絡你的管理員。\n為了安全起見,請不要轉寄此封電子郵件。", + "login.email.login.subject": "您的 Kirby 登入連結", + "login.email.password-reset.body": "嗨 {user.nameOrEmail},\n\n你最近請求了 {site} 控製臺的密碼重設驗證碼。\n以下驗證碼在 {timeout} 分鐘內有效:\n\n{code}\n\n如果你並未請求此驗證碼,請忽略此封信;如有疑問,請聯絡你的管理員。\n為了安全起見,請不要轉寄此封電子郵件。", + "login.email.password-reset.subject": "您的 Kirby 密碼重設連結", + "login.remember": "記住我", + "login.reset": "重設密碼", + "login.toggleText.code.email": "使用電子信箱登入", + "login.toggleText.code.email-password": "使用電子信箱與密碼登入", + "login.toggleText.password-reset.email": "忘記密碼?使用電子信箱重設", + "login.toggleText.password-reset.email-password": "返回使用密碼登入", + "login.totp.enable.option": "設定一次性驗證碼", + "login.totp.enable.intro": "增加帳號安全性,需使用驗證器應用程式", + "login.totp.enable.qr.label": "1. 掃描這個 QR 碼", + "login.totp.enable.qr.help": "無法掃描嗎?請將設定金鑰 {secret} 手動加入你的驗證器 App。", + "login.totp.enable.confirm.headline": "2. 使用產生的驗證碼進行確認", + "login.totp.enable.confirm.text": "你的 App 每 30 秒會產生一組新的一次性驗證碼。請輸入目前的驗證碼以完成設定:", + "login.totp.enable.confirm.label": "驗證碼", + "login.totp.enable.confirm.help": "來自驗證器 App 的 6 位數碼", + "login.totp.enable.success": "已成功啟用兩步驟驗證", + "login.totp.disable.option": "停用兩步驟驗證", + "login.totp.disable.label": "停用驗證", + "login.totp.disable.help": "您的帳號將不再需要驗證器登入", + "login.totp.disable.admin": "這將會停用 {user} 的一次性驗證碼。\n未來他們登入時,系統會改為要求其他第二驗證方式,例如透過電子郵件傳送的登入碼。\n{user} 可於下次登入後重新設定一次性驗證碼。", + "login.totp.disable.success": "已成功停用兩步驟驗證", + + "logout": "登出", + + "merge": "合併", + "menu": "選單", + "meridiem": "上午/下午", + "mime": "MIME 類型", + "minutes": "分鐘", + + "month": "月", + "months.april": "\u56db\u6708", + "months.august": "\u516b\u6708", + "months.december": "\u5341\u4e8c\u6708", + "months.february": "二月", + "months.january": "\u4e00\u6708", + "months.july": "\u4e03\u6708", + "months.june": "\u516d\u6708", + "months.march": "\u4e09\u6708", + "months.may": "\u4e94\u6708", + "months.november": "\u5341\u4e00\u6708", + "months.october": "\u5341\u6708", + "months.september": "\u4e5d\u6708", + + "more": "更多", + "move": "移動", + "name": "名稱", + "next": "下一步", + "night": "夜間", + "no": "否", + "off": "關閉", + "on": "開啟", + "open": "開啟", + "open.newWindow": "在新視窗開啟", + "option": "選項", + "options": "多選項", + "options.none": "無可用選項", + "options.all": "顯示全部 {count} 個選項", + + "orientation": "方向", + "orientation.landscape": "橫向", + "orientation.portrait": "直向", + "orientation.square": "正方形", + + "page": "頁", + "page.blueprint": "此頁面尚未設定藍圖。你可以在 /site/blueprints/pages/{blueprint}.yml 中定義設定內容。", + "page.changeSlug": "\u66f4\u6539\u9801\u9762\u7db2\u5740", + "page.changeSlug.fromTitle": "\u5f9e\u9801\u9762\u6a19\u984c\u8f38\u5165", + "page.changeStatus": "變更狀態", + "page.changeStatus.position": "頁面位置", + "page.changeStatus.select": "選擇狀態", + "page.changeTemplate": "變更樣板", + "page.changeTemplate.notice": "變更樣板可能會導致部分資料遺失,請小心操作", + "page.create": "建立為 {status}", + "page.delete.confirm": "\u78ba\u8a8d\u522a\u9664\u6b64\u9801\u9762\uff1f", + "page.delete.confirm.subpages": "此頁面下仍有子頁面,是否一併刪除?", + "page.delete.confirm.title": "請輸入頁面標題以確認", + "page.duplicate.appendix": "Copy", + "page.duplicate.files": "複製檔案", + "page.duplicate.pages": "複製子頁面", + "page.move": "移動頁面", + "page.sort": "排序頁面", + "page.status": "頁面狀態", + "page.status.draft": "草稿", + "page.status.draft.description": "該頁面處於草稿模式,僅對已登入的編輯者或透過秘密連結可見", + "page.status.listed": "已列出", + "page.status.listed.description": "該頁面對所有人公開", + "page.status.unlisted": "未列出", + "page.status.unlisted.description": "該頁面僅能透過網址存取", + + "pages": "頁面", + "pages.delete.confirm.selected": "你確定要刪除所有選取的頁面嗎?", + "pages.empty": "目前沒有任何頁面", + "pages.status.draft": "草稿", + "pages.status.listed": "已列出", + "pages.status.unlisted": "未列出", + + "pagination.page": "頁", + + "password": "\u5bc6\u78bc", + "paste": "貼上", + "paste.after": "貼在後方", + "paste.success": "已貼上 {count} 個項目!", + "pixel": "像素", + "plugin": "外掛", + "plugins": "外掛列表", + "prev": "上一步", + "preview": "預覽", + + "publish": "發佈", + "published": "已發佈", + + "remove": "移除", + "rename": "重新命名", + "renew": "重新啟用", + "replace": "\u66f4\u63db", + "replace.with": "取代為…", + "retry": "\u91cd\u8a66", + "revert": "\u653e\u68c4", + "revert.confirm": "你確定要還原變更嗎?", + + "role": "\u6b0a\u9650", + "role.admin.description": "具有所有權限,可管理使用者與網站設定", + "role.admin.title": "管理員", + "role.all": "所有角色", + "role.empty": "尚未設定角色", + "role.description.placeholder": "角色描述…", + "role.nobody.description": "無法登入後台的訪客角色", + "role.nobody.title": "訪客", + + "save": "\u5132\u5b58", + "saved": "已儲存", + "search": "搜尋", + "searching": "搜尋中…", + "search.min": "請至少輸入 {min} 個字元", + "search.all": "顯示全部 {count} 筆結果", + "search.results.none": "找不到符合的結果", + + "section.invalid": "區段無效", + "section.required": "此區段為必填", + + "security": "安全性", + "select": "選取", + "server": "伺服器", + "settings": "設定", + "show": "顯示", + "site.blueprint": "網站藍圖", + "size": "大小", + "slug": "\u9801\u9762\u7db2\u5740", + "sort": "排序", + "sort.drag": "拖曳以排序", + "split": "分割", + + "stats.empty": "目前沒有統計資料", + "status": "狀態", + + "system.info.copy": "複製系統資訊", + "system.info.copied": "系統資訊已複製", + "system.issues.content": "無法寫入 /content 資料夾", + "system.issues.eol.kirby": "你正在使用已終止維護的 Kirby 版本", + "system.issues.eol.plugin": "你安裝的 {plugin} 外掛已達到生命週期終點,將不再收到安全性更新。", + "system.issues.eol.php": "你安裝的 PHP 版本 {release} 已達生命週期終點,將不再收到安全性更新。", + "system.issues.debug": "目前系統處於除錯模式", + "system.issues.git": "專案資料夾中未偵測到 Git 儲存庫", + "system.issues.https": "網站未透過 HTTPS 保護", + "system.issues.kirby": "Kirby 核心檔案可能已變更,請重新安裝", + "system.issues.local": "網站可能仍在本機開發環境中運行", + "system.issues.site": "找不到 site/config.php 或檔案設定錯誤", + "system.issues.vue.compiler": "Vue 樣板編譯器已啟用", + "system.issues.vulnerability.kirby": "你的安裝可能受到以下漏洞影響(嚴重性:{severity}):{description}", + "system.issues.vulnerability.plugin": "你的安裝可能受到 {plugin} 外掛中以下漏洞影響(嚴重性:{severity}):{description}", + "system.updateStatus": "更新狀態", + "system.updateStatus.error": "無法檢查更新狀態", + "system.updateStatus.not-vulnerable": "目前版本無安全漏洞", + "system.updateStatus.security-update": "有免費的安全性更新版本 {version} 可供下載", + "system.updateStatus.security-upgrade": "有包含安全修正的版本 {version} 可供升級", + "system.updateStatus.unreleased": "目前為尚未正式發佈的版本", + "system.updateStatus.up-to-date": "已是最新版本", + "system.updateStatus.update": "有免費更新版本 {version} 可供下載", + "system.updateStatus.upgrade": "可升級至版本 {version}", + + "tel": "電話", + "tel.placeholder": "+49123456789", + "template": "頁面樣板", + + "theme": "主題", + "theme.light": "亮色主題", + "theme.dark": "暗色主題", + "theme.automatic": "配合系統預設", + + "title": "頁面標題", + "today": "今天", + + "toolbar.button.clear": "清除格式", + "toolbar.button.code": "程式碼", + "toolbar.button.bold": "\u7c97\u9ad4", + "toolbar.button.email": "電子郵件", + "toolbar.button.headings": "標題", + "toolbar.button.heading.1": "標題 1", + "toolbar.button.heading.2": "標題 2", + "toolbar.button.heading.3": "標題 3", + "toolbar.button.heading.4": "標題 4", + "toolbar.button.heading.5": "標題 5", + "toolbar.button.heading.6": "標題 6", + "toolbar.button.italic": "\u659c\u9ad4", + "toolbar.button.file": "檔案", + "toolbar.button.file.select": "選擇檔案", + "toolbar.button.file.upload": "上傳檔案", + "toolbar.button.link": "\u9023\u7d50", + "toolbar.button.paragraph": "段落", + "toolbar.button.strike": "刪除線", + "toolbar.button.sub": "下標", + "toolbar.button.sup": "上標", + "toolbar.button.ol": "有序清單", + "toolbar.button.underline": "底線", + "toolbar.button.ul": "無序清單", + + "translation.author": "翻譯者", + "translation.direction": "ltr", + "translation.name": "正體中文", + "translation.locale": "zh_TW", + + "type": "類型", + + "upload": "上傳", + "upload.error.cantMove": "檔案無法移動到目標位置", + "upload.error.cantWrite": "檔案無法寫入磁碟", + "upload.error.default": "上傳時發生未知錯誤", + "upload.error.extension": "副檔名不被允許", + "upload.error.formSize": "檔案超出表單限制的大小", + "upload.error.iniPostSize": "檔案超出 PHP 設定中的最大值", + "upload.error.iniSize": "檔案大小超過上傳限制", + "upload.error.noFile": "沒有選擇任何檔案", + "upload.error.noFiles": "找不到任何可上傳的檔案", + "upload.error.partial": "檔案僅部分上傳", + "upload.error.tmpDir": "找不到暫存資料夾", + "upload.errors": "上傳錯誤", + "upload.progress": "上傳進度", + + "url": "網址", + "url.placeholder": "例如:https://example.com", + + "user": "使用者", + "user.blueprint": "你可以在 /site/blueprints/users/{blueprint}.yml 中為此使用者角色定義額外的區段與表單欄位。", + "user.changeEmail": "變更電子信箱", + "user.changeLanguage": "變更語言", + "user.changeName": "變更名稱", + "user.changePassword": "變更密碼", + "user.changePassword.current": "目前密碼", + "user.changePassword.new": "更改密碼", + "user.changePassword.new.confirm": "確認新密碼", + "user.changeRole": "變更角色", + "user.changeRole.select": "選擇新角色", + "user.create": "新增使用者", + "user.delete": "刪除使用者", + "user.delete.confirm": "你確定要刪除「{email}」嗎?", + + "users": "使用者", + + "version": "版本", + "version.changes": "版本變更紀錄", + "version.compare": "比較版本", + "version.current": "目前版本", + "version.latest": "最新版本", + "versionInformation": "版本資訊", + + "view": "檢視", + "view.account": "\u60a8\u7684\u5e33\u865f", + "view.installation": "\u5b89\u88dd", + "view.languages": "語言管理", + "view.resetPassword": "重設密碼", + "view.site": "網站設定", + "view.system": "系統資訊", + "view.users": "\u4f7f\u7528\u8005", + + "welcome": "歡迎使用 Kirby", + "year": "年", + "yes": "是" +} diff --git a/kirby/panel/dist/css/style.min.css b/kirby/panel/dist/css/style.min.css index 9ee00d6..db2575d 100644 --- a/kirby/panel/dist/css/style.min.css +++ b/kirby/panel/dist/css/style.min.css @@ -1 +1 @@ -.k-items{position:relative;display:grid;container-type:inline-size}.k-items[data-layout=list]{gap:2px}.k-items[data-layout=cardlets]{--items-size: 1fr;display:grid;gap:.75rem;grid-template-columns:repeat(auto-fill,minmax(var(--items-size),1fr))}@container (min-width: 15rem){.k-items[data-layout=cardlets]{--items-size: 15rem}}.k-items[data-layout=cards]{display:grid;gap:1.5rem;grid-template-columns:1fr}@container (min-width: 6rem){.k-items[data-layout=cards][data-size=tiny]{grid-template-columns:repeat(auto-fill,minmax(6rem,1fr))}}@container (min-width: 9rem){.k-items[data-layout=cards][data-size=small]{grid-template-columns:repeat(auto-fill,minmax(9rem,1fr))}}@container (min-width: 12rem){.k-items[data-layout=cards][data-size=auto],.k-items[data-layout=cards][data-size=medium]{grid-template-columns:repeat(auto-fill,minmax(12rem,1fr))}}@container (min-width: 15rem){.k-items[data-layout=cards][data-size=large]{grid-template-columns:repeat(auto-fill,minmax(15rem,1fr))}}@container (min-width: 18rem){.k-items[data-layout=cards][data-size=huge]{grid-template-columns:repeat(auto-fill,minmax(18rem,1fr))}}.k-collection-footer{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:nowrap;gap:var(--spacing-12);margin-top:var(--spacing-2)}.k-empty{max-width:100%}:root{--item-button-height: var(--height-md);--item-button-width: var(--height-md);--item-height: auto;--item-height-cardlet: calc(var(--height-md) * 3)}.k-item{position:relative;background:var(--color-white);box-shadow:var(--shadow);border-radius:var(--rounded);height:var(--item-height);container-type:inline-size}.k-item:has(a:focus){outline:2px solid var(--color-focus)}@supports not selector(:has(*)){.k-item:focus-within{outline:2px solid var(--color-focus)}}.k-item .k-icon-frame{--back: var(--color-gray-300)}.k-item-content{line-height:1.25;overflow:hidden;padding:var(--spacing-2)}.k-item-content a:focus{outline:0}.k-item-content a:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.k-item-info{color:var(--color-text-dimmed)}.k-item-options{transform:translate(0);z-index:1;display:flex;align-items:center;justify-content:space-between}.k-item-options[data-only-option=true]{justify-content:flex-end}.k-item-options .k-button{--button-height: var(--item-button-height);--button-width: var(--item-button-width)}.k-item .k-sort-button{position:absolute;z-index:2}.k-item:not(:hover):not(.k-sortable-fallback) .k-sort-button{opacity:0}.k-item[data-layout=list]{--item-height: var( --field-input-height );--item-button-height: var(--item-height);--item-button-width: auto;display:grid;height:var(--item-height);align-items:center;grid-template-columns:1fr auto}.k-item[data-layout=list][data-has-image=true]{grid-template-columns:var(--item-height) 1fr auto}.k-item[data-layout=list] .k-frame{--ratio: 1/1;border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded);height:var(--item-height)}.k-item[data-layout=list] .k-item-content{display:flex;min-width:0;white-space:nowrap;gap:var(--spacing-2);justify-content:space-between}.k-item[data-layout=list] .k-item-title,.k-item[data-layout=list] .k-item-info{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.k-item[data-layout=list] .k-item-title{flex-shrink:1}.k-item[data-layout=list] .k-item-info{flex-shrink:2}@container (max-width: 30rem){.k-item[data-layout=list] .k-item-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.k-item[data-layout=list] .k-item-info{display:none}}.k-item[data-layout=list] .k-sort-button{--button-width: calc(1.5rem + var(--spacing-1));--button-height: var(--item-height);left:calc(-1 * var(--button-width))}.k-item:is([data-layout=cardlets],[data-layout=cards]) .k-sort-button{top:var(--spacing-2);inset-inline-start:var(--spacing-2);background:#ffffff7f;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);box-shadow:0 2px 5px #0003;--button-width: 1.5rem;--button-height: 1.5rem;--button-rounded: var(--rounded-sm);--button-padding: 0;--icon-size: 14px}.k-item:is([data-layout=cardlets],[data-layout=cards]) .k-sort-button:hover{background:#fffffff2}.k-item[data-layout=cardlets]{--item-height: var(--item-height-cardlet);display:grid;grid-template-areas:"content" "options";grid-template-columns:1fr;grid-template-rows:1fr var(--height-md)}.k-item[data-layout=cardlets][data-has-image=true]{grid-template-areas:"image content" "image options";grid-template-columns:minmax(0,var(--item-height)) 1fr}.k-item[data-layout=cardlets] .k-frame{grid-area:image;border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded);aspect-ratio:auto;height:var(--item-height)}.k-item[data-layout=cardlets] .k-item-content{grid-area:content}.k-item[data-layout=cardlets] .k-item-info{margin-top:.125em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.k-item[data-layout=cardlets] .k-item-options{grid-area:options}.k-item[data-layout=cards]{display:flex;flex-direction:column}.k-item[data-layout=cards] .k-frame{border-start-start-radius:var(--rounded);border-start-end-radius:var(--rounded)}.k-item[data-layout=cards] .k-item-content{flex-grow:1;padding:var(--spacing-2)}.k-item[data-layout=cards] .k-item-info{margin-top:.125em}.k-item[data-theme=disabled]{background:transparent;box-shadow:none;outline:1px solid var(--color-border);outline-offset:-1px}.k-dialog-body{padding:var(--dialog-padding)}.k-dialog[data-has-footer=true] .k-dialog-body{padding-bottom:0}.k-button-group.k-dialog-buttons{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-3);--button-height: var(--height-lg)}.k-dialog-fields{padding-bottom:.5rem;container-type:inline-size}.k-dialog-footer{padding:var(--dialog-padding);line-height:1;flex-shrink:0}.k-dialog .k-notification{padding-block:.325rem;border-start-start-radius:var(--dialog-rounded);border-start-end-radius:var(--dialog-rounded);margin-top:-1px}.k-dialog-search{margin-bottom:.75rem;--input-color-border: transparent;--input-color-back: var(--color-gray-300)}:root{--dialog-color-back: var(--color-light);--dialog-color-text: currentColor;--dialog-margin: var(--spacing-6);--dialog-padding: var(--spacing-6);--dialog-rounded: var(--rounded-xl);--dialog-shadow: var(--shadow-xl);--dialog-width: 22rem}.k-dialog-portal{padding:var(--dialog-margin)}.k-dialog{position:relative;background:var(--dialog-color-back);color:var(--dialog-color-text);width:clamp(10rem,100%,var(--dialog-width));box-shadow:var(--dialog-shadow);border-radius:var(--dialog-rounded);line-height:1;display:flex;flex-direction:column;overflow:clip;container-type:inline-size}@media screen and (min-width: 20rem){.k-dialog[data-size=small]{--dialog-width: 20rem}}@media screen and (min-width: 22rem){.k-dialog[data-size=default]{--dialog-width: 22rem}}@media screen and (min-width: 30rem){.k-dialog[data-size=medium]{--dialog-width: 30rem}}@media screen and (min-width: 40rem){.k-dialog[data-size=large]{--dialog-width: 40rem}}@media screen and (min-width: 60rem){.k-dialog[data-size=huge]{--dialog-width: 60rem}}.k-dialog .k-pagination{margin-bottom:-1.5rem;display:flex;justify-content:center;align-items:center}.k-changes-dialog .k-headline{margin-top:-.5rem;margin-bottom:var(--spacing-3)}.k-error-details{background:var(--color-white);display:block;overflow:auto;padding:1rem;font-size:var(--text-sm);line-height:1.25em;margin-top:.75rem}.k-error-details dt{color:var(--color-red-500);margin-bottom:.25rem}.k-error-details dd{overflow:hidden;overflow-wrap:break-word;text-overflow:ellipsis}.k-error-details dd:not(:last-of-type){margin-bottom:1.5em}.k-error-details li{white-space:pre-line}.k-error-details li:not(:last-child){border-bottom:1px solid var(--color-background);padding-bottom:.25rem;margin-bottom:.25rem}.k-models-dialog .k-list-item{cursor:pointer}.k-models-dialog .k-choice-input{--choice-color-checked: var(--color-focus);display:flex;align-items:center;height:var(--item-button-height);margin-inline-end:var(--spacing-3)}.k-models-dialog .k-choice-input input{top:0}.k-models-dialog .k-collection-footer .k-pagination{margin-bottom:0}.k-license-dialog-status{display:flex;align-items:center;gap:var(--spacing-2)}.k-license-dialog .k-icon{color:var(--theme-color-700)}.k-page-template-switch{margin-bottom:var(--spacing-6);padding-bottom:var(--spacing-6);border-bottom:1px dashed var(--color-gray-300)}.k-page-move-dialog .k-headline{margin-bottom:var(--spacing-2)}.k-page-move-parent{--tree-color-back: var(--color-white);--tree-color-hover-back: var(--color-light);padding:var(--spacing-3);background:var(--color-white);border-radius:var(--rounded);box-shadow:var(--shadow)}.k-pages-dialog-navbar{display:flex;align-items:center;justify-content:center;margin-bottom:.5rem;padding-inline-end:38px}.k-pages-dialog-navbar .k-button[aria-disabled]{opacity:0}.k-pages-dialog-navbar .k-headline{flex-grow:1;text-align:center}.k-pages-dialog-option[aria-disabled]{opacity:.25}.k-search-dialog{--dialog-padding: 0;--dialog-rounded: var(--rounded);overflow:visible}.k-overlay[open][data-type=dialog]>.k-portal>.k-search-dialog{margin-top:0}.k-totp-dialog-headline{margin-bottom:var(--spacing-1)}.k-totp-dialog-intro{margin-bottom:var(--spacing-6)}.k-totp-dialog-grid{display:grid;gap:var(--spacing-6)}@media screen and (min-width: 40rem){.k-totp-dialog-grid{grid-template-columns:1fr 1fr;gap:var(--spacing-8)}}.k-totp-qrcode .k-box[data-theme]{padding:var(--box-padding-inline)}.k-totp-dialog-fields .k-field-name-confirm{--input-height: var(--height-xl);--input-rounded: var(--rounded);--input-font-size: var(--text-3xl)}.k-upload-dialog.k-dialog{--dialog-width: 40rem}.k-upload-replace-dialog .k-upload-items{display:flex;gap:var(--spacing-3);align-items:center}.k-upload-original{width:6rem;border-radius:var(--rounded);box-shadow:var(--shadow);overflow:hidden}.k-upload-replace-dialog .k-upload-item{flex-grow:1}.k-drawer-body{padding:var(--drawer-body-padding);flex-grow:1;background:var(--color-background)}.k-drawer-body .k-writer-input:focus-within .k-toolbar:not([data-inline=true]),.k-drawer-body .k-textarea-input-wrapper:focus-within .k-toolbar,.k-drawer-body .k-table th{top:-1.5rem}.k-drawer-header{--button-height: calc(var(--drawer-header-height) - var(--spacing-1));flex-shrink:0;height:var(--drawer-header-height);padding-inline-start:var(--drawer-header-padding);display:flex;align-items:center;line-height:1;justify-content:space-between;background:var(--color-white);font-size:var(--text-sm)}.k-drawer-breadcrumb{flex-grow:1}.k-drawer-options{display:flex;align-items:center;padding-inline-end:.75rem}.k-drawer-option{--button-width: var(--button-height)}.k-drawer-option[aria-disabled]{opacity:var(--opacity-disabled)}.k-notification.k-drawer-notification{padding:.625rem 1.5rem}.k-drawer-tabs{display:flex;align-items:center;line-height:1}.k-drawer-tab.k-button{--button-height: calc(var(--drawer-header-height) - var(--spacing-1));--button-padding: var(--spacing-3);display:flex;align-items:center;font-size:var(--text-xs);overflow-x:visible}.k-drawer-tab.k-button[aria-current]:after{position:absolute;bottom:-2px;inset-inline:var(--button-padding);content:"";background:var(--color-black);height:2px;z-index:1}:root{--drawer-body-padding: 1.5rem;--drawer-color-back: var(--color-light);--drawer-header-height: 2.5rem;--drawer-header-padding: 1rem;--drawer-shadow: var(--shadow-xl);--drawer-width: 50rem}.k-drawer-overlay+.k-drawer-overlay{--overlay-color-back: none}.k-drawer{--header-sticky-offset: calc(var(--drawer-body-padding) * -1);z-index:var(--z-toolbar);flex-basis:var(--drawer-width);position:relative;display:flex;flex-direction:column;background:var(--drawer-color-back);box-shadow:var(--drawer-shadow);container-type:inline-size}.k-drawer[aria-disabled]{display:none;pointer-events:none}.k-dropdown{position:relative}:root{--dropdown-color-bg: var(--color-black);--dropdown-color-text: var(--color-white);--dropdown-color-current: var(--color-blue-500);--dropdown-color-hr: rgba(255, 255, 255, .25);--dropdown-padding: var(--spacing-2);--dropdown-rounded: var(--rounded);--dropdown-shadow: var(--shadow-xl)}.k-dropdown-content{--dropdown-x: 0;--dropdown-y: 0;position:absolute;inset-block-start:0;inset-inline-start:initial;left:0;width:max-content;padding:var(--dropdown-padding);background:var(--dropdown-color-bg);border-radius:var(--dropdown-rounded);color:var(--dropdown-color-text);box-shadow:var(--dropdown-shadow);text-align:start;transform:translate(var(--dropdown-x),var(--dropdown-y))}.k-dropdown-content::backdrop{background:none}.k-dropdown-content[data-align-x=end]{--dropdown-x: -100%}.k-dropdown-content[data-align-x=center]{--dropdown-x: -50%}.k-dropdown-content[data-align-y=top]{--dropdown-y: -100%}.k-dropdown-content hr{margin:.5rem 0;height:1px;background:var(--dropdown-color-hr)}.k-dropdown-content[data-theme=light]{--dropdown-color-bg: var(--color-white);--dropdown-color-text: var(--color-black);--dropdown-color-current: var(--color-blue-800);--dropdown-color-hr: rgba(0, 0, 0, .1)}.k-dropdown-item.k-button{--button-align: flex-start;--button-color-text: var(--dropdown-color-text);--button-height: var(--height-sm);--button-rounded: var(--rounded-sm);--button-width: 100%;display:flex}.k-dropdown-item.k-button:focus{outline:var(--outline)}.k-dropdown-item.k-button[aria-current]{--button-color-text: var(--dropdown-color-current)}.k-dropdown-item.k-button[aria-current]:after{margin-inline-start:auto;text-align:center;content:"✓";padding-inline-start:var(--spacing-1)}.k-dropdown-item.k-button:not([aria-disabled]):hover{--button-color-back: var(--dropdown-color-hr)}.k-options-dropdown{display:flex;justify-content:center;align-items:center}:root{--picklist-rounded: var(--rounded-sm);--picklist-highlight: var(--color-yellow-500)}.k-picklist-input{--choice-color-text: currentColor;--button-rounded: var(--picklist-rounded)}.k-picklist-input-header{--input-rounded: var(--picklist-rounded)}.k-picklist-input-search{display:flex;align-items:center;border-radius:var(--picklist-rounded)}.k-picklist-input-search .k-search-input{height:var(--button-height)}.k-picklist-input-search:focus-within{outline:var(--outline)}.k-picklist-dropdown .k-picklist-input-create:focus{outline:0}.k-picklist-dropdown .k-picklist-input-create[aria-disabled=true]{visibility:hidden}.k-picklist-input-options.k-grid{--columns: 1}.k-picklist-input-options li+li{margin-top:var(--spacing-1)}.k-picklist-input-options .k-choice-input{padding-inline:var(--spacing-2)}.k-picklist-input-options .k-choice-input{--choice-color-checked: var(--color-focus)}.k-picklist-input-options .k-choice-input:has(:checked){--choice-color-text: var(--color-focus)}.k-picklist-input-options .k-choice-input[aria-disabled=true]{--choice-color-text: var(--color-text-dimmed)}.k-picklist-input-options .k-choice-input:has(:focus-within){outline:var(--outline)}.k-picklist-input-options .k-choice-input b{font-weight:var(--font-normal);color:var(--picklist-highlight)}.k-picklist-input-more.k-button{--button-width: 100%;--button-align: start;--button-color-text: var(--color-text-dimmed);padding-inline:var(--spacing-2)}.k-picklist-input-more.k-button .k-button-icon{position:relative;inset-inline-start:-1px}.k-picklist-input-empty{height:var(--button-height);line-height:1.25rem;padding:var(--spacing-1) var(--spacing-2);color:var(--color-text-dimmed)}.k-picklist-dropdown{--color-text-dimmed: var(--color-gray-400);padding:0;max-width:30rem;min-width:8rem}.k-picklist-dropdown :where(.k-picklist-input-header,.k-picklist-input-body,.k-picklist-input-footer){padding:var(--dropdown-padding)}.k-picklist-dropdown .k-picklist-input-header{border-bottom:1px solid var(--dropdown-color-hr)}.k-picklist-dropdown .k-picklist-input-search{background:var(--dropdown-color-hr);padding-inline-end:var(--input-padding)}.k-picklist-dropdown .k-picklist-input-create{--button-rounded: 1rem;--button-height: 1.125rem}.k-picklist-dropdown .k-picklist-input-create:focus{--button-color-back: var(--color-blue-500);--button-color-text: var(--color-black)}.k-picklist-dropdown .k-picklist-input-body{max-height:calc(var(--button-height) * 9.5 + 2px * 9 + var(--dropdown-padding));overflow-y:auto;outline-offset:-2px;overscroll-behavior:contain;scroll-padding-top:var(--dropdown-padding);scroll-padding-bottom:var(--dropdown-padding)}.k-picklist-dropdown .k-picklist-input-options .k-choice-input{--choice-color-border: var(--dropdown-color-hr);--choice-color-back: var(--dropdown-color-hr);--choice-color-info: var(--color-text-dimmed);min-height:var(--button-height);border-radius:var(--picklist-rounded);padding-block:.375rem}.k-picklist-dropdown .k-picklist-input-options li+li{margin-top:0}.k-picklist-dropdown .k-picklist-input-options .k-choice-input[aria-disabled=true] input{--choice-color-border: var(--dropdown-color-hr);--choice-color-back: var(--dropdown-color-hr);--choice-color-checked: var(--dropdown-color-hr);opacity:var(--opacity-disabled)}.k-picklist-dropdown .k-picklist-input-options .k-choice-input:not([aria-disabled=true]):hover{background-color:var(--dropdown-color-hr)}.k-picklist-dropdown .k-picklist-input-options .k-choice-input:not([aria-disabled=true]):focus-within{--choice-color-text: var(--color-blue-500)}.k-picklist-dropdown .k-picklist-input-more.k-button:hover{--button-color-back: var(--dropdown-color-hr)}.k-picklist-dropdown .k-picklist-input-body+.k-picklist-input-footer{border-top:1px solid var(--dropdown-color-hr)}.k-counter{font-size:var(--text-xs);color:var(--color-gray-900)}.k-counter[data-invalid=true]{color:var(--color-red-700)}.k-counter-rules{color:var(--color-gray-600);padding-inline-start:.5rem}.k-form-submitter{display:none}.k-field[data-disabled=true]{cursor:not-allowed}.k-field[data-disabled=true] *{pointer-events:none}.k-field[data-disabled=true] .k-text[data-theme=help] *{pointer-events:initial}.k-field-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-6);position:relative;margin-bottom:var(--spacing-2)}.k-field-options{flex-shrink:0}.k-field:focus-within>.k-field-header>.k-field-counter{display:block}.k-field-footer{margin-top:var(--spacing-2)}.k-fieldset{border:0}:root{--input-color-back: var(--color-white);--input-color-border: var(--color-border);--input-color-description: var(--color-text-dimmed);--input-color-icon: currentColor;--input-color-placeholder: var(--color-gray-600);--input-color-text: currentColor;--input-font-family: var(--font-sans);--input-font-size: var(--text-sm);--input-height: 2.25rem;--input-leading: 1;--input-outline-focus: var(--outline);--input-padding: var(--spacing-2);--input-padding-multiline: .475rem var(--input-padding);--input-rounded: var(--rounded);--input-shadow: none}@media (pointer: coarse){:root{--input-font-size: var(--text-md);--input-padding-multiline: .375rem var(--input-padding)}}.k-input{display:flex;align-items:center;line-height:var(--input-leading);border:0;background:var(--input-color-back);border-radius:var(--input-rounded);outline:1px solid var(--input-color-border);color:var(--input-color-text);min-height:var(--input-height);box-shadow:var(--input-shadow);font-family:var(--input-font-family);font-size:var(--input-font-size)}.k-input:focus-within{outline:var(--input-outline-focus)}.k-input-element{flex-grow:1;min-width:0}.k-input-icon{color:var(--input-color-icon);display:flex;justify-content:center;align-items:center;width:var(--input-height)}.k-input-icon-button{width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.k-input-description{color:var(--input-color-description);padding-inline:var(--input-padding)}.k-input-before{padding-inline-end:0}.k-input-after{padding-inline-start:0}.k-input :where(.k-input-description,.k-input-icon){align-self:stretch;display:flex;align-items:center;flex-shrink:0}.k-input[data-disabled=true]{--input-color-back: var(--color-background);--input-color-icon: var(--color-gray-600);pointer-events:none}.k-block-title{display:flex;align-items:center;min-width:0;padding-inline-end:.75rem;line-height:1;gap:var(--spacing-2)}.k-block-icon{--icon-color: var(--color-gray-600);width:1rem}.k-block-label{color:var(--color-text-dimmed);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.k-block-type-default .k-block-title{line-height:1.5em}.k-block-options{--toolbar-size: 30px;box-shadow:var(--shadow-toolbar)}.k-block-options>.k-button:not(:last-of-type){border-inline-end:1px solid var(--color-background)}.k-block-options .k-dropdown-content{margin-top:.5rem}.k-block-container{position:relative;padding:var(--spacing-3);background:var(--color-white);border-radius:var(--rounded)}.k-block-container:not(:last-of-type){border-bottom:1px dashed rgba(0,0,0,.1)}.k-block-container:focus{outline:0}.k-block-container[data-selected=true]{z-index:2;outline:var(--outline);border-bottom-color:transparent}.k-block-container[data-batched=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:#b1c2d82d;mix-blend-mode:multiply}.k-block-container .k-block-options{display:none;position:absolute;top:0;inset-inline-end:var(--spacing-3);margin-top:calc(-1.75rem + 2px)}.k-block-container[data-last-selected=true]>.k-block-options{display:flex}.k-block-container[data-hidden=true] .k-block{opacity:.25}.k-drawer-options .k-drawer-option[data-disabled=true]{vertical-align:middle;display:inline-grid}.k-block-container[data-disabled=true]{background:var(--color-background)}.k-block-container:is(.k-sortable-ghost,.k-sortable-fallback) .k-block{position:relative;max-height:4rem;overflow:hidden}.k-block-container:is(.k-sortable-ghost,.k-sortable-fallback) .k-block:after{position:absolute;bottom:0;content:"";height:2rem;width:100%;background:linear-gradient(to top,var(--color-white),transparent)}.k-blocks{border-radius:var(--rounded)}.k-blocks:not([data-empty=true],[data-disabled=true]){background:var(--color-white);box-shadow:var(--shadow)}.k-blocks[data-disabled=true]:not([data-empty=true]){border:1px solid var(--input-color-border)}.k-blocks-list[data-multi-select-key=true]>.k-block-container *{pointer-events:none}.k-blocks-list[data-multi-select-key=true]>.k-block-container .k-blocks *{pointer-events:all}.k-blocks .k-sortable-ghost{outline:2px solid var(--color-focus);box-shadow:#11111140 0 5px 10px;cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.k-blocks-list>.k-blocks-empty{display:flex;align-items:center}.k-block-importer .k-dialog-body{padding:0}.k-block-importer label{display:block;padding:var(--spacing-6) var(--spacing-6) 0;color:var(--color-text-dimmed);line-height:var(--leading-normal)}.k-block-importer label small{display:block;font-size:inherit}.k-block-importer textarea{width:100%;height:20rem;background:none;font:inherit;color:var(--color-white);border:0;padding:var(--spacing-6);resize:none}.k-block-importer textarea:focus{outline:0}.k-block-selector .k-headline{margin-bottom:1rem}.k-block-selector details+details{margin-top:var(--spacing-6)}.k-block-selector summary{font-size:var(--text-xs);cursor:pointer;color:var(--color-text-dimmed)}.k-block-selector details:only-of-type summary{pointer-events:none}.k-block-selector summary:focus{outline:0}.k-block-selector summary:focus-visible{color:var(--color-focus)}.k-block-types{display:grid;grid-gap:2px;margin-top:.75rem;grid-template-columns:repeat(1,1fr)}.k-block-types .k-button{--button-color-icon: var(--color-text);--button-color-back: var(--color-white);--button-padding: var(--spacing-3);width:100%;justify-content:start;gap:1rem;box-shadow:var(--shadow)}.k-block-types .k-button[aria-disabled]{opacity:var(--opacity-disabled);--button-color-back: var(--color-gray-200);box-shadow:none}.k-clipboard-hint{padding-top:1.5rem;line-height:var(--leading-normal);font-size:var(--text-xs);color:var(--color-text-dimmed)}.k-clipboard-hint small{display:block;font-size:inherit;color:var(--color-text-dimmed)}.k-block-background-dropdown>.k-button{--color-frame-rounded: 0;--color-frame-size: 1.5rem;--button-height: 1.5rem;--button-padding: 0 .125rem;--button-color-back: var(--color-white);gap:.25rem;box-shadow:var(--shadow-toolbar);border:1px solid var(--color-white)}.k-block-background-dropdown .k-color-frame{border-right:1px solid var(--color-gray-300)}.k-block-background-dropdown .k-color-frame:after{box-shadow:none}.k-block .k-block-background-dropdown{position:absolute;inset-inline-end:var(--spacing-3);bottom:var(--spacing-3);opacity:0;transition:opacity .2s ease-in-out}.k-block:hover .k-block-background-dropdown{opacity:1}.k-block-figure:not([data-empty=true]){--block-figure-back: var(--color-white);background:var(--block-figure-back)}.k-block-figure-container:not([data-disabled=true]){cursor:pointer}.k-block-figure iframe{border:0;pointer-events:none;background:var(--color-black)}.k-block-figure figcaption{padding-top:.5rem;color:var(--color-text-dimmed);font-size:var(--text-sm);text-align:center}.k-block-figure-empty{--button-width: 100%;--button-height: 6rem;--button-color-text: var(--color-text-dimmed);--button-color-back: var(--color-gray-200)}.k-block-figure-empty,.k-block-figure-container>*{border-radius:var(--rounded-sm)}.k-block-figure-caption{display:flex;justify-content:center;padding-top:var(--spacing-3)}.k-block-figure-caption .k-writer{width:max-content;text-align:center}.k-block-figure-caption .k-writer .k-text{color:var(--color-gray-600);font-size:var(--text-sm);mix-blend-mode:exclusion}.k-block-type-code-editor{position:relative}.k-block-type-code-editor .k-input{--input-color-border: none;--input-color-back: var(--color-black);--input-color-text: var(--color-white);--input-font-family: var(--font-mono);--input-outline-focus: none;--input-padding: var(--spacing-3);--input-padding-multiline: var(--input-padding)}.k-block-type-code-editor .k-input[data-type=textarea]{white-space:pre-wrap}.k-block-type-code-editor-language{--input-font-size: var(--text-xs);position:absolute;inset-inline-end:0;bottom:0}.k-block-type-code-editor-language .k-input-element{padding-inline-start:1.5rem}.k-block-type-code-editor-language .k-input-icon{inset-inline-start:0}.k-block-container.k-block-container-type-fields{padding-block:0}.k-block-container:not([data-hidden=true]) .k-block-type-fields>:not([data-collapsed=true]){padding-bottom:var(--spacing-3)}.k-block-type-fields-header{display:flex;justify-content:space-between}.k-block-type-fields-header .k-block-title{padding-block:var(--spacing-3);cursor:pointer;white-space:nowrap}.k-block-type-fields-form{background-color:var(--color-gray-200);padding:var(--spacing-6) var(--spacing-6) var(--spacing-8);border-radius:var(--rounded-sm);container:column / inline-size}.k-block-container-type-fields[data-hidden=true] :where(.k-drawer-tabs,.k-block-type-fields-form){display:none}.k-block-container.k-block-container-type-gallery{padding:0}.k-block-type-gallery-figure{padding:var(--spacing-3);border-radius:var(--rounded)}.k-block-type-gallery-figure:not([data-empty=true]){background:var(--block-back)}.k-block-type-gallery-figure ul{display:grid;grid-gap:.75rem;grid-template-columns:repeat(auto-fit,minmax(6rem,1fr));line-height:0;align-items:center;justify-content:center}.k-block-type-gallery:not([data-disabled=true]) .k-block-type-gallery-figure ul{cursor:pointer}.k-block-type-gallery-frame{border-radius:var(--rounded-sm)}.k-block-type-gallery[data-disabled=true] .k-block-type-gallery-placeholder{background:var(--color-gray-250)}.k-block-type-gallery-placeholder{background:var(--color-background)}.k-block-type-heading-input{display:flex;align-items:center;line-height:1.25em;font-size:var(--text-size);font-weight:var(--font-bold)}.k-block-type-heading-input[data-level=h1]{--text-size: var(--text-3xl);line-height:1.125em}.k-block-type-heading-input[data-level=h2]{--text-size: var(--text-2xl)}.k-block-type-heading-input[data-level=h3]{--text-size: var(--text-xl)}.k-block-type-heading-input[data-level=h4]{--text-size: var(--text-lg)}.k-block-type-heading-input[data-level=h5]{--text-size: var(--text-md);line-height:1.5em}.k-block-type-heading-input[data-level=h6]{--text-size: var(--text-sm);line-height:1.5em}.k-block-type-heading-input .k-writer .ProseMirror strong{font-weight:700}.k-block-type-heading-level{--input-color-back: transparent;--input-color-border: none;--input-color-text: var(--color-gray-600);font-weight:var(--font-bold);text-transform:uppercase}.k-block-container.k-block-container-type-image{padding:0}.k-block-type-image .k-block-figure{padding:var(--spacing-3);border-radius:var(--rounded)}.k-block-type-image .k-block-figure-container{text-align:center;line-height:0}.k-block-type-image .k-block-figure[data-empty=true]{padding:var(--spacing-3)}.k-block-type-image-auto{max-width:100%;max-height:30rem;margin-inline:auto}.k-block-type-image .k-background-dropdown{position:absolute;inset-inline-end:var(--spacing-3);bottom:var(--spacing-3);opacity:0;transition:opacity .2s ease-in-out}.k-block-type-image:hover .k-background-dropdown{opacity:1}.k-block-type-line hr{margin-block:.75rem;border:0;border-top:1px solid var(--color-border)}.k-block-type-list-input{--input-color-back: transparent;--input-color-border: none;--input-outline-focus: none}.k-block-type-markdown-input{--input-color-back: var(--color-light);--input-color-border: none;--input-outline-focus: none;--input-padding-multiline: var(--spacing-3)}.k-block-type-quote-editor{padding-inline-start:var(--spacing-3);border-inline-start:2px solid var(--color-black)}.k-block-type-quote-text{font-size:var(--text-xl);margin-bottom:var(--spacing-1);line-height:1.25em}.k-block-type-quote-citation{font-style:italic;color:var(--color-text-dimmed)}.k-block-type-table-preview{cursor:pointer;border:1px solid var(--color-gray-300);border-spacing:0;border-radius:var(--rounded-sm)}.k-block-type-table-preview :where(th,td){text-align:start;line-height:1.5em;font-size:var(--text-sm)}.k-block-type-table-preview th{padding:.5rem .75rem}.k-block-type-table-preview td:not(.k-table-index-column){padding:0 .75rem}.k-block-type-table-preview td>*,.k-block-type-table-preview td [class$=-field-preview]{padding:0}.k-block-type-text-input{line-height:1.5;height:100%}.k-block-container.k-block-container-type-text{padding:0}.k-block-type-text-input.k-writer[data-toolbar-inline=true]{padding:var(--spacing-3)}.k-block-type-text-input.k-writer:not([data-toolbar-inline=true])>.ProseMirror,.k-block-type-text-input.k-writer:not([data-toolbar-inline=true])[data-placeholder][data-empty=true]:before{padding:var(--spacing-3) var(--spacing-6)}.k-block-type-text-input.k-textarea-input .k-textarea-input-native{padding:var(--input-padding-multiline)}.k-block-type-video-figure video{pointer-events:none}.k-blocks-field{position:relative}.k-blocks-field>footer{display:flex;justify-content:center;margin-top:var(--spacing-3)}.k-string-input{padding:var(--input-padding);border-radius:var(--input-rounded)}.k-string-input:focus{outline:0}.k-string-input[data-font=monospace]{font-family:var(--font-mono)}.k-color-field{--color-frame-size: calc(var(--input-height) - var(--spacing-2))}.k-color-field .k-input-before{align-items:center;padding-inline-start:var(--spacing-1)}.k-color-field-options{--color-frame-size: var(--input-height)}.k-color-field-picker{padding:var(--spacing-3)}.k-color-field-picker-toggle{--color-frame-rounded: var(--rounded-sm);border-radius:var(--color-frame-rounded)}.k-color-field .k-colorname-input{padding-inline:var(--input-padding)}.k-color-field .k-colorname-input:focus{outline:0}.k-date-input:disabled::placeholder{opacity:0}.k-date-field-body{display:grid;gap:var(--spacing-2)}@container (min-width: 20rem){.k-date-field-body[data-has-time=true]{grid-template-columns:1fr minmax(6rem,9rem)}}.k-text-input{padding:var(--input-padding);border-radius:var(--input-rounded)}.k-text-input:focus{outline:0}.k-text-input[data-font=monospace]{font-family:var(--font-mono)}.k-text-input:disabled::placeholder{opacity:0}.k-models-field[data-disabled=true] .k-item *{pointer-events:all!important}.k-headline-field{position:relative;padding-top:1.5rem}.k-fieldset>.k-grid .k-column:first-child .k-headline-field{padding-top:0}.k-headline-field h2.k-headline{font-weight:var(--font-normal)}.k-headline-field footer{margin-top:var(--spacing-2)}.k-info-field .k-headline{padding-bottom:.75rem;line-height:1.25rem}.k-layout-column{position:relative;height:100%;display:flex;flex-direction:column;background:var(--color-white);min-height:6rem}.k-layout-column:focus{outline:0}.k-layout-column>.k-blocks{background:none;box-shadow:none;padding:0;height:100%;background:var(--color-white);min-height:4rem}.k-layout-column>.k-blocks[data-empty=true]{min-height:6rem}.k-layout-column>.k-blocks>.k-blocks-list{display:flex;flex-direction:column;height:100%}.k-layout-column>.k-blocks>.k-blocks-list>.k-block-container:last-of-type{flex-grow:1}.k-layout-column>.k-blocks>.k-blocks-list>.k-blocks-empty.k-box{--box-color-back: transparent;position:absolute;top:0;right:0;bottom:0;left:0;justify-content:center;opacity:0;transition:opacity .3s;border:0}.k-layout-column>.k-blocks>.k-blocks-list>.k-blocks-empty:hover{opacity:1}.k-layout{--layout-border-color: var(--color-gray-300);--layout-toolbar-width: 2rem;position:relative;padding-inline-end:var(--layout-toolbar-width);background:#fff;box-shadow:var(--shadow)}[data-disabled=true] .k-layout{padding-inline-end:0}.k-layout:not(:last-of-type){margin-bottom:1px}.k-layout:focus{outline:0}.k-layout-toolbar{position:absolute;inset-block:0;inset-inline-end:0;width:var(--layout-toolbar-width);display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding-bottom:var(--spacing-2);font-size:var(--text-sm);background:var(--color-gray-100);border-inline-start:1px solid var(--color-light);color:var(--color-gray-500)}.k-layout-toolbar:hover{color:var(--color-black)}.k-layout-toolbar-button{width:var(--layout-toolbar-width);height:var(--layout-toolbar-width)}.k-layout-columns.k-grid{grid-gap:1px;background:var(--layout-border-color);background:var(--color-gray-300)}.k-layout:not(:first-child) .k-layout-columns.k-grid{border-top:0}.k-layouts .k-sortable-ghost{position:relative;box-shadow:#11111140 0 5px 10px;outline:2px solid var(--color-focus);cursor:grabbing;z-index:1}.k-layout-field>footer{display:flex;justify-content:center;margin-top:var(--spacing-3)}.k-line-field{position:relative;border:0;height:3rem;width:auto}.k-line-field:after{position:absolute;content:"";top:50%;margin-top:-1px;inset-inline:0;height:1px;background:var(--color-border)}.k-link-input-header{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:.25rem;height:var(--input-height);grid-area:header}.k-link-input-toggle.k-button{--button-height: var(--height-sm);--button-rounded: var(--rounded-sm);--button-color-back: var(--color-gray-200);margin-inline-start:.25rem}.k-link-input-model{display:flex;justify-content:space-between;margin-inline-end:var(--spacing-1)}.k-link-input-model-placeholder.k-button{--button-align: flex-start;--button-color-text: var(--color-gray-600);--button-height: var(--height-sm);--button-padding: var(--spacing-2);--button-rounded: var(--rounded-sm);flex-grow:1;overflow:hidden;white-space:nowrap;align-items:center}.k-link-field .k-link-field-preview{--tag-height: var(--height-sm);padding-inline:0}.k-link-field .k-link-field-preview .k-tag:focus{outline:0}.k-link-field .k-link-field-preview .k-tag:focus-visible{outline:var(--outline)}.k-link-field .k-link-field-preview .k-tag-text{font-size:var(--text-sm)}.k-link-input-model-toggle{align-self:center;--button-height: var(--height-sm);--button-width: var(--height-sm);--button-rounded: var(--rounded-sm)}.k-link-input-body{display:grid;overflow:hidden;border-top:1px solid var(--color-gray-300);background:var(--color-gray-100);--tree-color-back: var(--color-gray-100);--tree-color-hover-back: var(--color-gray-200)}.k-link-input-body[data-type=page] .k-page-browser{padding:var(--spacing-2);padding-bottom:calc(var(--spacing-2) - 1px);width:100%;container-type:inline-size;overflow:auto}.k-link-field .k-bubbles-field-preview{--bubble-rounded: var(--rounded-sm);--bubble-size: var(--height-sm);padding-inline:0}.k-link-field .k-bubbles-field-preview .k-bubble{font-size:var(--text-sm)}.k-link-field[data-disabled=true] .k-link-input-model-placeholder{display:none}.k-link-field[data-disabled=true] input::placeholder{opacity:0}.k-writer{position:relative;width:100%;display:grid;grid-template-areas:"content";gap:var(--spacing-1)}.k-writer .ProseMirror{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;white-space:pre-wrap;font-variant-ligatures:none;grid-area:content;padding:var(--input-padding-multiline)}.k-writer .ProseMirror:focus{outline:0}.k-writer .ProseMirror *{caret-color:currentColor}.k-writer .ProseMirror hr.ProseMirror-selectednode{outline:var(--outline)}.k-writer[data-placeholder][data-empty=true]:before{grid-area:content;content:attr(data-placeholder);color:var(--input-color-placeholder);pointer-events:none;white-space:pre-wrap;word-wrap:break-word;line-height:var(--text-line-height);padding:var(--input-padding-multiline)}.k-list-input.k-writer[data-placeholder][data-empty=true]:before{padding-inline-start:2.5em}.k-list-field .k-list-input .ProseMirror,.k-list-field .k-list-input:before{padding:.475rem .5rem .475rem .75rem}:root{--tags-gap: .375rem}.k-tags{display:inline-flex;max-width:100%;gap:var(--tags-gap);align-items:center;flex-wrap:wrap}.k-tags .k-sortable-ghost{outline:var(--outline)}.k-tags[data-layout=list],.k-tags[data-layout=list] .k-tag{width:100%}.k-tags.k-draggable .k-tag-text{cursor:grab}.k-tags.k-draggable .k-tag-text:active{cursor:grabbing}.k-multiselect-input{padding:var(--tags-gap);cursor:pointer}.k-multiselect-input-toggle.k-button{opacity:0}.k-tags-input{padding:var(--tags-gap)}.k-tags-input[data-can-add=true]{cursor:pointer}.k-tags-input-toggle.k-button{--button-color-text: var(--input-color-placeholder);opacity:0}.k-tags-input-toggle.k-button:focus{--button-color-text: var(--input-color-text)}.k-tags-input:focus-within .k-tags-input-toggle{opacity:1}.k-tags-input .k-picklist-dropdown{margin-top:var(--spacing-1)}.k-tags-input .k-picklist-dropdown .k-choice-input:focus-within{outline:var(--outline)}.k-number-input{padding:var(--input-padding);border-radius:var(--input-rounded)}.k-number-input:focus{outline:0}.k-table.k-object-field-table{table-layout:auto}.k-table.k-object-field-table tbody td{max-width:0}@container (max-width: 40rem){.k-object-field{overflow:hidden}.k-object-field-table.k-table tbody :where(th):is([data-mobile=true]){width:1px!important;white-space:normal;word-break:normal}}.k-range-input{--range-track-height: 1px;--range-track-back: var(--color-gray-300);--range-tooltip-back: var(--color-black);display:flex;align-items:center;border-radius:var(--range-track-height)}.k-range-input input[type=range]:focus{outline:0}.k-range-input-tooltip{position:relative;display:flex;align-items:center;color:var(--color-white);font-size:var(--text-xs);font-variant-numeric:tabular-nums;line-height:1;text-align:center;border-radius:var(--rounded-sm);background:var(--range-tooltip-back);margin-inline-start:var(--spacing-3);padding:0 var(--spacing-1);white-space:nowrap}.k-range-input-tooltip:after{position:absolute;top:50%;inset-inline-start:-3px;width:0;height:0;transform:translateY(-50%);border-block:3px solid transparent;border-inline-end:3px solid var(--range-tooltip-back);content:""}.k-range-input-tooltip>*{padding:var(--spacing-1)}.k-range-input[data-disabled=true]{--range-tooltip-back: var(--color-gray-600)}.k-input[data-type=range] .k-range-input{padding-inline:var(--input-padding)}.k-select-input{position:relative;display:block;overflow:hidden;padding:var(--input-padding);border-radius:var(--input-rounded)}.k-select-input[data-empty=true]{color:var(--input-color-placeholder)}.k-select-input-native{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;z-index:1}.k-select-input-native[disabled]{cursor:default}.k-input[data-type=select]{position:relative}.k-input[data-type=select] .k-input-icon{position:absolute;inset-block:0;inset-inline-end:0}.k-structure-field:not([data-disabled=true]) td.k-table-column{cursor:pointer}.k-structure-field .k-table+footer{display:flex;justify-content:center;margin-top:var(--spacing-3)}.k-field-counter{display:none}.k-text-field:focus-within .k-field-counter{display:block}.k-toolbar.k-textarea-toolbar{border-end-start-radius:0;border-end-end-radius:0;border-bottom:1px solid var(--toolbar-border)}.k-toolbar.k-textarea-toolbar>.k-button:first-child{border-end-start-radius:0}.k-toolbar.k-textarea-toolbar>.k-button:last-child{border-end-end-radius:0}.k-textarea-input[data-size=small]{--textarea-size: 7.5rem}.k-textarea-input[data-size=medium]{--textarea-size: 15rem}.k-textarea-input[data-size=large]{--textarea-size: 30rem}.k-textarea-input[data-size=huge]{--textarea-size: 45rem}.k-textarea-input-wrapper{position:relative;display:block}.k-textarea-input-native{resize:none;min-height:var(--textarea-size)}.k-textarea-input-native:focus{outline:0}.k-textarea-input-native[data-font=monospace]{font-family:var(--font-mono)}.k-input[data-type=textarea] .k-input-element{min-width:0}.k-input[data-type=textarea] .k-textarea-input-native{padding:var(--input-padding-multiline)}.k-time-input:disabled::placeholder{opacity:0}.k-input[data-type=toggle]{--input-color-border: transparent;--input-shadow: var(--shadow)}.k-input[data-type=toggle] .k-input-before{padding-inline-end:calc(var(--input-padding) / 2)}.k-input[data-type=toggle] .k-toggle-input{padding-inline-start:var(--input-padding)}.k-input[data-type=toggle][data-disabled]{box-shadow:none;border:1px solid var(--color-border)}.k-input[data-type=toggles]{display:inline-flex}.k-input[data-type=toggles].grow{display:flex}.k-input[data-type=toggles]:has(.k-empty){outline:0;display:flex}.k-toggles-input{display:grid;grid-template-columns:repeat(var(--options),minmax(0,1fr));gap:1px;border-radius:var(--rounded);line-height:1;background:var(--color-border);overflow:hidden}.k-toggles-input li{height:var(--field-input-height);background:var(--color-white)}.k-toggles-input label{align-items:center;background:var(--color-white);cursor:pointer;display:flex;font-size:var(--text-sm);justify-content:center;line-height:1.25;padding:0 var(--spacing-3);height:100%}.k-toggles-input li[data-disabled=true] label{color:var(--color-text-dimmed);background:var(--color-light)}.k-toggles-input .k-icon+.k-toggles-text{margin-inline-start:var(--spacing-2)}.k-toggles-input input:focus:not(:checked)+label{background:var(--color-blue-200)}.k-toggles-input input:checked+label{background:var(--color-black);color:var(--color-white)}.k-alpha-input{--range-track-back: linear-gradient(to right, transparent, currentColor);--range-track-height: var(--range-thumb-size);color:#000;background:var(--color-white) var(--pattern-light)}.k-calendar-input{--button-height: var(--height-sm);--button-width: var(--button-height);--button-padding: 0;padding:var(--spacing-2);width:min-content}.k-calendar-table{table-layout:fixed;min-width:15rem}.k-calendar-input .k-button{justify-content:center}.k-calendar-input>nav{display:flex;direction:ltr;align-items:center;margin-bottom:var(--spacing-2)}.k-calendar-selects{flex-grow:1;display:flex;align-items:center;justify-content:center}[dir=ltr] .k-calendar-selects{direction:ltr}[dir=rtl] .k-calendar-selects{direction:rtl}.k-calendar-selects .k-select-input{display:flex;align-items:center;text-align:center;height:var(--button-height);padding:0 .5rem;border-radius:var(--input-rounded)}.k-calendar-selects .k-select-input:focus-within{outline:var(--outline)}.k-calendar-input th{padding-block:.5rem;color:var(--color-gray-500);font-size:var(--text-xs);text-align:center}.k-calendar-day{padding:2px}.k-calendar-day[aria-current=date] .k-button{text-decoration:underline}.k-calendar-day[aria-selected=date] .k-button,.k-calendar-day[aria-selected=date] .k-button:focus{--button-color-text: var(--color-text);--button-color-back: var(--color-blue-500)}.k-calendar-day[aria-selected=date] .k-button:focus-visible{outline-offset:2px}.k-calendar-today{padding-top:var(--spacing-2);text-align:center}.k-calendar-today .k-button{--button-width: auto;--button-padding: var(--spacing-3);font-size:var(--text-xs);text-decoration:underline}.k-choice-input{display:flex;gap:var(--spacing-3);min-width:0}.k-choice-input input{top:2px}.k-choice-input-label{display:flex;line-height:1.25rem;flex-direction:column;min-width:0;color:var(--choice-color-text)}.k-choice-input-label>*{display:block;overflow:hidden;text-overflow:ellipsis}.k-choice-input-label-info{color:var(--choice-color-info)}.k-choice-input[aria-disabled]{cursor:not-allowed}:where(.k-checkboxes-field,.k-radio-field) .k-choice-input{min-height:var(--input-height);padding-block:var(--spacing-2);padding-inline:var(--spacing-3);border-radius:var(--input-rounded)}:where(.k-checkboxes-field,.k-radio-field) .k-choice-input:not([aria-disabled=true]){background:var(--input-color-back);box-shadow:var(--shadow)}:where(.k-checkboxes-field,.k-radio-field) .k-choice-input[aria-disabled=true]{border:1px solid var(--input-color-border)}.k-coloroptions-input{--color-preview-size: var(--input-height)}.k-coloroptions-input ul{display:grid;grid-template-columns:repeat(auto-fill,var(--color-preview-size));gap:var(--spacing-2)}.k-coloroptions-input input:focus+.k-color-frame{outline:var(--outline)}.k-coloroptions-input[disabled] label{opacity:var(--opacity-disabled);cursor:not-allowed}.k-coloroptions-input input:checked+.k-color-frame{outline:1px solid var(--color-gray-600);outline-offset:2px}.k-colorpicker-input{--h: 0;--s: 0%;--l: 0%;--a: 1;--range-thumb-size: .75rem;--range-track-height: .75rem;display:flex;flex-direction:column;gap:var(--spacing-3);width:max-content}.k-colorpicker-input .k-coords-input{border-radius:var(--rounded-sm);aspect-ratio:1/1;background:linear-gradient(to bottom,transparent,#000),linear-gradient(to right,#fff,hsl(var(--h),100%,50%))}.k-colorpicker-input .k-alpha-input{color:hsl(var(--h),var(--s),var(--l))}.k-colorpicker-input .k-coloroptions-input ul{grid-template-columns:repeat(6,1fr)}.k-coords-input{position:relative;display:block!important}.k-coords-input img{width:100%}.k-coords-input-thumb{position:absolute;aspect-ratio:1/1;width:var(--range-thumb-size);background:var(--range-thumb-color);border-radius:var(--range-thumb-size);box-shadow:var(--range-thumb-shadow);transform:translate(-50%,-50%);cursor:move}.k-coords-input[data-empty] .k-coords-input-thumb{opacity:0}.k-coords-input-thumb:active{cursor:grabbing}.k-coords-input:focus-within{outline:var(--outline)}.k-coords-input[aria-disabled]{pointer-events:none;opacity:var(--opacity-disabled)}.k-coords-input .k-coords-input-thumb:focus{outline:var(--outline)}.k-hue-input{--range-track-back: linear-gradient( to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 16.67%, hsl(120, 100%, 50%) 33.33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 66.67%, hsl(320, 100%, 50%) 83.33%, hsl(360, 100%, 50%) 100% ) no-repeat;--range-track-height: var(--range-thumb-size)}.k-timeoptions-input{--button-height: var(--height-sm);display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-3)}.k-timeoptions-input h3{display:flex;align-items:center;padding-inline:var(--button-padding);height:var(--button-height);margin-bottom:var(--spacing-1)}.k-timeoptions-input hr{margin:var(--spacing-2) var(--spacing-3)}.k-timeoptions-input .k-button[aria-selected=time]{--button-color-text: var(--color-text);--button-color-back: var(--color-blue-500)}.k-layout-selector h3{margin-top:-.5rem;margin-bottom:var(--spacing-3)}.k-layout-selector-options{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-6)}@media screen and (min-width: 65em){.k-layout-selector-options{grid-template-columns:repeat(var(--columns),1fr)}}.k-layout-selector-option{--color-border: hsla(var(--color-gray-hs), 0%, 6%);--color-back: var(--color-white);border-radius:var(--rounded)}.k-layout-selector-option:focus-visible{outline:var(--outline);outline-offset:-1px}.k-layout-selector-option .k-grid{border:1px solid var(--color-border);gap:1px;grid-template-columns:repeat(var(--columns),1fr);cursor:pointer;background:var(--color-border);border-radius:var(--rounded);overflow:hidden;box-shadow:var(--shadow);height:5rem}.k-layout-selector-option .k-column{grid-column:span var(--span);background:var(--color-back);height:100%}.k-layout-selector-option:hover{--color-border: var(--color-gray-500);--color-back: var(--color-gray-100)}.k-layout-selector-option[aria-current]{--color-border: var(--color-focus);--color-back: var(--color-blue-300)}.k-bubbles{display:flex;gap:.25rem}.k-bubbles-field-preview{--bubble-back: var(--color-light);--bubble-text: var(--color-black);padding:.375rem var(--table-cell-padding);overflow:hidden}.k-bubbles-field-preview .k-bubbles{gap:.375rem}.k-color-field-preview{--color-frame-rounded: var(--tag-rounded);--color-frame-size: var(--tag-height);padding:.375rem var(--table-cell-padding);display:flex;align-items:center;gap:var(--spacing-2)}.k-text-field-preview{padding:.325rem .75rem;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.k-url-field-preview{padding-inline:var(--table-cell-padding)}.k-url-field-preview[data-link]{color:var(--link-color)}.k-url-field-preview a{display:inline-flex;align-items:center;height:var(--height-xs);padding-inline:var(--spacing-1);margin-inline:calc(var(--spacing-1) * -1);border-radius:var(--rounded);max-width:100%;min-width:0}.k-url-field-preview a>*{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-decoration:underline;text-underline-offset:var(--link-underline-offset)}.k-url-field-preview a:hover{color:var(--color-black)}.k-flag-field-preview{--button-height: var(--table-row-height);--button-width: 100%;outline-offset:-2px}.k-html-field-preview{padding:.375rem var(--table-cell-padding);overflow:hidden;text-overflow:ellipsis}.k-image-field-preview{height:100%}.k-link-field-preview{--tag-height: var(--height-xs);--tag-color-back: var(--color-gray-200);--tag-color-text: var(--color-black);--tag-color-toggle: var(--tag-color-text);--tag-color-toggle-border: var(--color-gray-300);--tag-color-focus-back: var(--tag-color-back);--tag-color-focus-text: var(--tag-color-text);padding-inline:var(--table-cell-padding);min-width:0}.k-link-field-preview .k-tag{min-width:0;max-width:100%}.k-link-field-preview .k-tag-text{font-size:var(--text-xs);min-width:0}.k-toggle-field-preview{padding-inline:var(--table-cell-padding)}:root{--toolbar-size: var(--height);--toolbar-text: var(--color-black);--toolbar-back: var(--color-white);--toolbar-hover: rgba(239, 239, 239, .5);--toolbar-border: rgba(0, 0, 0, .1);--toolbar-current: var(--color-focus)}.k-toolbar{display:flex;max-width:100%;height:var(--toolbar-size);align-items:center;overflow-x:auto;overflow-y:hidden;color:var(--toolbar-text);background:var(--toolbar-back);border-radius:var(--rounded)}.k-toolbar[data-theme=dark]{--toolbar-text: var(--color-white);--toolbar-back: var(--color-black);--toolbar-hover: rgba(255, 255, 255, .2);--toolbar-border: var(--color-gray-800)}.k-toolbar>hr{height:var(--toolbar-size);width:1px;border-left:1px solid var(--toolbar-border)}.k-toolbar-button.k-button{--button-width: var(--toolbar-size);--button-height: var(--toolbar-size);--button-rounded: 0;outline-offset:-2px}.k-toolbar-button:hover{--button-color-back: var(--toolbar-hover)}.k-toolbar .k-button[aria-current]{--button-color-text: var(--toolbar-current)}.k-toolbar>.k-button:first-child{border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded)}.k-toolbar>.k-button:last-child{border-start-end-radius:var(--rounded);border-end-end-radius:var(--rounded)}:where(.k-textarea-input,.k-writer-input):not(:focus-within){--toolbar-text: var(--color-gray-400);--toolbar-border: var(--color-background)}:where(.k-textarea-input,.k-writer-input):focus-within .k-toolbar:not([data-inline=true]){position:sticky;top:var(--header-sticky-offset);inset-inline:0;z-index:1;box-shadow:#0000000d 0 2px 5px}.k-writer:not([data-toolbar-inline=true]):not([data-disabled=true]){grid-template-areas:"topbar" "content";grid-template-rows:var(--toolbar-size) 1fr;gap:0}.k-writer:not(:focus-within){--toolbar-current: currentColor}.k-writer-toolbar[data-inline=true]{position:absolute;z-index:calc(var(--z-dropdown) + 1);max-width:none;box-shadow:var(--shadow-toolbar)}.k-writer-toolbar:not([data-inline=true]){border-end-start-radius:0;border-end-end-radius:0;border-bottom:1px solid var(--toolbar-border)}.k-writer-toolbar:not([data-inline=true])>.k-button:first-child{border-end-start-radius:0}.k-writer-toolbar:not([data-inline=true])>.k-button:last-child{border-end-end-radius:0}.k-aspect-ratio{position:relative;display:block;overflow:hidden;padding-bottom:100%}.k-aspect-ratio>*{position:absolute!important;top:0;right:0;bottom:0;left:0;height:100%;width:100%;object-fit:contain}.k-aspect-ratio[data-cover=true]>*{object-fit:cover}:root{--bar-height: var(--height-xs)}.k-bar{display:flex;align-items:center;gap:var(--spacing-3);height:var(--bar-height);justify-content:space-between}.k-bar:where([data-align=center]){justify-content:center}.k-bar:where([data-align=end]):has(:first-child:last-child){justify-content:end}.k-bar-slot{flex-grow:1}.k-bar-slot[data-position=center]{text-align:center}.k-bar-slot[data-position=right]{text-align:end}:root{--box-height: var( --field-input-height );--box-padding-inline: var(--spacing-2);--box-font-size: var(--text-sm);--box-color-back: none;--box-color-text: currentColor}.k-box{--icon-color: var(--box-color-icon);--text-font-size: var(--box-font-size);display:flex;width:100%;align-items:center;gap:var(--spacing-2);color:var(--box-color-text);background:var(--box-color-back);word-wrap:break-word}.k-box[data-theme]{--box-color-back: var(--theme-color-back);--box-color-text: var(--theme-color-text);--box-color-icon: var(--theme-color-700);min-height:var(--box-height);line-height:1.25;padding:.375rem var(--box-padding-inline);border-radius:var(--rounded)}.k-box[data-theme=text],.k-box[data-theme=white]{box-shadow:var(--shadow)}.k-box[data-theme=text]{padding:var(--spacing-6)}.k-box[data-theme=none]{padding:0}.k-box[data-align=center]{justify-content:center}:root{--bubble-size: 1.525rem;--bubble-back: var(--color-light);--bubble-rounded: var(--rounded-sm);--bubble-text: var(--color-black)}.k-bubble{width:min-content;height:var(--bubble-size);white-space:nowrap;line-height:1.5;background:var(--bubble-back);color:var(--bubble-text);border-radius:var(--bubble-rounded);overflow:hidden}.k-bubble .k-frame{width:var(--bubble-size);height:var(--bubble-size)}.k-bubble[data-has-text=true]{display:flex;gap:var(--spacing-2);align-items:center;padding-inline-end:.5rem;font-size:var(--text-xs)}.k-column{min-width:0}.k-column[data-sticky=true]{align-self:stretch}.k-column[data-sticky=true]>div{position:sticky;top:calc(var(--header-sticky-offset) + 2vh);z-index:2}.k-column[data-disabled=true]{cursor:not-allowed;opacity:.4}.k-column[data-disabled=true] *{pointer-events:none}.k-column[data-disabled=true] .k-text[data-theme=help] *{pointer-events:initial}.k-frame{--fit: contain;--ratio: 1/1;position:relative;display:flex;justify-content:center;align-items:center;aspect-ratio:var(--ratio);background:var(--back);overflow:hidden}.k-frame:where([data-theme]){--back: var(--theme-color-back);color:var(--theme-color-text)}.k-frame *:where(img,video,iframe,button){position:absolute;top:0;right:0;bottom:0;left:0;height:100%;width:100%;object-fit:var(--fit)}.k-frame>*{overflow:hidden;text-overflow:ellipsis;min-width:0;min-height:0}:root{--color-frame-back: none;--color-frame-rounded: var(--rounded);--color-frame-size: 100%;--color-frame-darkness: 0%}.k-color-frame.k-frame{background:var(--pattern-light);width:var(--color-frame-size);color:transparent;border-radius:var(--color-frame-rounded);overflow:hidden;background-clip:padding-box}.k-color-frame:after{border-radius:var(--color-frame-rounded);box-shadow:0 0 0 1px inset hsla(0,0%,var(--color-frame-darkness),.175);position:absolute;top:0;right:0;bottom:0;left:0;background:var(--color-frame-back);content:""}.k-dropzone{position:relative}.k-dropzone:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;display:none;pointer-events:none;z-index:1;border-radius:var(--rounded)}.k-dropzone[data-over=true]:after{display:block;background:hsla(var(--color-blue-hs),var(--color-blue-l-300),.6);outline:var(--outline)}.k-grid{--columns: 12;--grid-inline-gap: 0;--grid-block-gap: 0;display:grid;align-items:start;grid-column-gap:var(--grid-inline-gap);grid-row-gap:var(--grid-block-gap)}.k-grid>*{--width: calc(1 / var(--columns));--span: calc(var(--columns) * var(--width))}@container (min-width: 30rem){.k-grid{grid-template-columns:repeat(var(--columns),1fr)}.k-grid>*{grid-column:span var(--span)}.k-grid[data-gutter=small]{--grid-inline-gap: 1rem;--grid-block-gap: 1rem}.k-grid:where([data-gutter=medium],[data-gutter=large],[data-gutter=huge]){--grid-inline-gap: 1.5rem;--grid-block-gap: 1.5rem}}@container (min-width: 65em){.k-grid[data-gutter=large]{--grid-inline-gap: 3rem}.k-grid[data-gutter=huge]{--grid-inline-gap: 4.5rem}}@container (min-width: 90em){.k-grid[data-gutter=large]{--grid-inline-gap: 4.5rem}.k-grid[data-gutter=huge]{--grid-inline-gap: 6rem}}@container (min-width: 120em){.k-grid[data-gutter=large]{--grid-inline-gap: 6rem}.k-grid[data-gutter=huge]{--grid-inline-gap: 7.5rem}}:root{--columns-inline-gap: clamp(.75rem, 6cqw, 6rem);--columns-block-gap: var(--spacing-8)}.k-grid[data-variant=columns]{--grid-inline-gap: var(--columns-inline-gap);--grid-block-gap: var(--columns-block-gap)}.k-grid:where([data-variant=columns],[data-variant=fields])>*{container:column / inline-size}.k-grid[data-variant=fields]{gap:var(--spacing-8)}.k-grid[data-variant=choices]{align-items:stretch;gap:2px}:root{--header-color-back: var(--color-light);--header-padding-block: var(--spacing-4);--header-sticky-offset: var(--scroll-top)}.k-header{position:relative;display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;border-bottom:1px solid var(--color-border);background:var(--header-color-back);padding-top:var(--header-padding-block);margin-bottom:var(--spacing-12);box-shadow:2px 0 0 0 var(--header-color-back),-2px 0 0 0 var(--header-color-back)}.k-header-title{font-size:var(--text-h1);font-weight:var(--font-h1);line-height:var(--leading-h1);margin-bottom:var(--header-padding-block);min-width:0}.k-header-title-button{display:inline-flex;text-align:start;gap:var(--spacing-2);align-items:baseline;max-width:100%;outline:0}.k-header-title-text{overflow-x:clip;text-overflow:ellipsis}.k-header-title-icon{--icon-color: var(--color-text-dimmed);border-radius:var(--rounded);transition:opacity .2s;display:grid;flex-shrink:0;place-items:center;height:var(--height-sm);width:var(--height-sm);opacity:0}.k-header-title-button:is(:hover,:focus) .k-header-title-icon{opacity:1}.k-header-title-button:is(:focus) .k-header-title-icon{outline:var(--outline)}.k-header-buttons{display:flex;flex-shrink:0;gap:var(--spacing-2);margin-bottom:var(--header-padding-block)}.k-header[data-has-buttons=true]{position:sticky;top:var(--scroll-top);z-index:var(--z-toolbar)}:root:has(.k-header[data-has-buttons=true]){--header-sticky-offset: calc(var(--scroll-top) + 4rem)}:root{--icon-size: 18px;--icon-color: currentColor}.k-icon{width:var(--icon-size);height:var(--icon-size);flex-shrink:0;color:var(--icon-color)}.k-icon[data-type=loader]{animation:Spin 1.5s linear infinite}@media only screen and (-webkit-min-device-pixel-ratio: 2),not all,not all,not all,only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){.k-button-icon [data-type=emoji]{font-size:1.25em}}.k-icon-frame [data-type=emoji]{overflow:visible}.k-image[data-back=pattern]{--back: var(--color-black) var(--pattern)}.k-image[data-back=black]{--back: var(--color-black)}.k-image[data-back=white]{--back: var(--color-white);color:var(--color-gray-900)}:root{--overlay-color-back: var(--color-backdrop)}.k-overlay[open]{position:fixed;overscroll-behavior:contain;top:0;right:0;bottom:0;left:0;width:100%;height:100vh;height:100dvh;background:none;z-index:var(--z-dialog);transform:translateZ(0);overflow:hidden}.k-overlay[open]::backdrop{background:none}.k-overlay[open]>.k-portal{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay-color-back);overflow:auto}.k-overlay[open][data-type=dialog]>.k-portal{display:inline-flex}.k-overlay[open][data-type=dialog]>.k-portal>*{margin:auto}.k-overlay[open][data-type=drawer]>.k-portal{--overlay-color-back: rgba(0, 0, 0, .2);display:flex;align-items:stretch;justify-content:flex-end}html[data-overlay]{overflow:hidden}html[data-overlay] body{overflow:scroll}:root{--stat-value-text-size: var(--text-2xl);--stat-info-text-color: var(--color-text-dimmed)}.k-stat{display:flex;flex-direction:column;padding:var(--spacing-3) var(--spacing-6);background:var(--color-white);border-radius:var(--rounded);box-shadow:var(--shadow);line-height:var(--leading-normal)}.k-stat.k-link:hover{cursor:pointer;background:var(--color-gray-100)}.k-stat :where(dt,dd){display:block}.k-stat-value{order:1;font-size:var(--stat-value-text-size);margin-bottom:var(--spacing-1)}.k-stat-label{--icon-size: var(--text-sm);order:2;display:flex;justify-content:start;align-items:center;gap:var(--spacing-1);font-size:var(--text-xs)}.k-stat-info{order:3;font-size:var(--text-xs);color:var(--stat-info-text-color)}.k-stat:is([data-theme]) .k-stat-info{--stat-info-text-color: var(--theme-color-700)}.k-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));grid-auto-rows:1fr;grid-gap:var(--spacing-2px)}.k-stats[data-size=small]{--stat-value-text-size: var(--text-md)}.k-stats[data-size=medium]{--stat-value-text-size: var(--text-xl)}.k-stats[data-size=large]{--stat-value-text-size: var(--text-2xl)}.k-stats[data-size=huge]{--stat-value-text-size: var(--text-3xl)}:root{--table-cell-padding: var(--spacing-3);--table-color-back: var(--color-white);--table-color-border: var(--color-background);--table-color-hover: var(--color-gray-100);--table-color-th-back: var(--color-gray-100);--table-color-th-text: var(--color-text-dimmed);--table-row-height: var(--input-height)}.k-table{position:relative;background:var(--table-color-back);box-shadow:var(--shadow);border-radius:var(--rounded)}.k-table table{table-layout:fixed}.k-table th,.k-table td{padding-inline:var(--table-cell-padding);height:var(--table-row-height);overflow:hidden;text-overflow:ellipsis;width:100%;border-inline-end:1px solid var(--table-color-border);line-height:1.25}.k-table tr>*:last-child{border-inline-end:0}.k-table th,.k-table tr:not(:last-child) td{border-block-end:1px solid var(--table-color-border)}.k-table :where(td,th)[data-align]{text-align:var(--align)}.k-table th{padding-inline:var(--table-cell-padding);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--table-color-th-text);background:var(--table-color-th-back)}.k-table th[data-has-button]{padding:0}.k-table th button{padding-inline:var(--table-cell-padding);height:100%;width:100%;border-radius:var(--rounded);text-align:start}.k-table th button:focus-visible{outline-offset:-2px}.k-table thead th:first-child{border-start-start-radius:var(--rounded)}.k-table thead th:last-child{border-start-end-radius:var(--rounded)}.k-table thead th{position:sticky;top:var(--header-sticky-offset);inset-inline:0;z-index:1}.k-table tbody tr:hover td{background:var(--table-color-hover)}.k-table tbody th{width:auto;white-space:nowrap;overflow:visible;border-radius:0}.k-table tbody tr:first-child th{border-start-start-radius:var(--rounded)}.k-table tbody tr:last-child th{border-end-start-radius:var(--rounded);border-block-end:0}.k-table-row-ghost{background:var(--color-white);outline:var(--outline);border-radius:var(--rounded);margin-bottom:2px;cursor:grabbing}.k-table-row-fallback{opacity:0!important}.k-table .k-table-index-column{width:var(--table-row-height);text-align:center}.k-table .k-table-index{font-size:var(--text-xs);color:var(--color-text-dimmed);line-height:1.1em}.k-table .k-table-index-column .k-sort-handle{--button-width: 100%;display:none}.k-table tr.k-table-sortable-row:hover .k-table-index-column .k-table-index{display:none}.k-table tr.k-table-sortable-row:hover .k-table-index-column .k-sort-handle{display:flex}.k-table .k-table-options-column{padding:0;width:var(--table-row-height);text-align:center}.k-table .k-table-options-column .k-options-dropdown-toggle{--button-width: 100%;--button-height: 100%;outline-offset:-2px}.k-table-empty{color:var(--color-text-dimmed);font-size:var(--text-sm)}.k-table[aria-disabled=true]{--table-color-back: transparent;--table-color-border: var(--color-border);--table-color-hover: transparent;--table-color-th-back: transparent;border:1px solid var(--table-color-border);box-shadow:none}.k-table[aria-disabled=true] thead th{position:static}@container (max-width: 40rem){.k-table{overflow-x:auto}.k-table thead th{position:static}.k-table .k-options-dropdown-toggle{aspect-ratio:auto!important}.k-table :where(th,td):not(.k-table-index-column,.k-table-options-column,[data-column-id=image],[data-column-id=flag]){width:auto!important}.k-table :where(th,td):not([data-mobile=true]){display:none}}.k-table-pagination{border-top:1px solid var(--table-color-border);height:var(--table-row-height);background:var(--table-color-th-back);display:flex;justify-content:center;border-end-start-radius:var(--rounded);border-end-end-radius:var(--rounded)}.k-table-pagination>.k-button{--button-color-back: transparent;border-left:0!important}.k-table .k-table-cell{padding:0}.k-tabs{--button-height: var(--height-md);--button-padding: var(--spacing-2);display:flex;gap:var(--spacing-1);margin-bottom:var(--spacing-12);margin-inline:calc(var(--button-padding) * -1)}.k-tabs-tab{position:relative}.k-tab-button.k-button{margin-block:2px;overflow-x:visible}.k-tab-button[aria-current]:after{position:absolute;content:"";height:2px;inset-inline:var(--button-padding);bottom:-2px;background:currentColor}.k-tabs-badge{position:absolute;top:2px;font-variant-numeric:tabular-nums;inset-inline-end:var(--button-padding);transform:translate(75%);line-height:1.5;padding:0 var(--spacing-1);border-radius:1rem;text-align:center;font-size:10px;box-shadow:var(--shadow-md);background:var(--theme-color-back);border:1px solid var(--theme-color-500);color:var(--theme-color-text);z-index:1}.k-view{padding-inline:1.5rem}@container (min-width: 30rem){.k-view{padding-inline:3rem}}.k-view[data-align=center]{height:100vh;display:flex;align-items:center;justify-content:center;padding:0 3rem;overflow:auto}.k-view[data-align=center]>*{flex-basis:22.5rem}.k-fatal[open]{background:var(--overlay-color-back);padding:var(--spacing-6)}.k-fatal-box{position:relative;width:100%;box-shadow:var(--dialog-shadow);border-radius:var(--dialog-rounded);line-height:1;height:calc(100vh - 3rem);height:calc(100dvh - 3rem);display:flex;flex-direction:column;overflow:hidden}.k-fatal-iframe{border:0;width:100%;flex-grow:1;background:var(--color-white);padding:var(--spacing-3)}.k-icons{position:absolute;width:0;height:0}.k-loader{z-index:1}.k-loader-icon{animation:Spin .9s linear infinite}.k-notification{padding:.75rem 1.5rem;background:var(--color-gray-900);width:100%;line-height:1.25rem;color:var(--color-white);display:flex;flex-shrink:0;align-items:center}.k-notification[data-theme]{background:var(--theme-color-back);color:var(--color-black)}.k-notification p{flex-grow:1;word-wrap:break-word;overflow:hidden}.k-notification .k-button{display:flex;margin-inline-start:1rem}.k-offline-warning{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-offline);background:var(--color-backdrop);display:flex;align-items:center;justify-content:center;line-height:1}.k-offline-warning p{display:flex;align-items:center;gap:.5rem;background:var(--color-white);box-shadow:var(--shadow);padding:.75rem;border-radius:var(--rounded)}.k-offline-warning p .k-icon{color:var(--color-red-400)}:root{--progress-height: var(--spacing-2);--progress-color-back: var(--color-gray-300);--progress-color-value: var(--color-focus)}progress{display:block;width:100%;height:var(--progress-height);border-radius:var(--progress-height);overflow:hidden;border:0}progress::-webkit-progress-bar{background:var(--progress-color-back)}progress::-webkit-progress-value{background:var(--progress-color-value);border-radius:var(--progress-height)}progress::-moz-progress-bar{background:var(--progress-color-value)}progress:not([value])::-webkit-progress-bar{background:var(--progress-color-value)}progress:not([value])::-moz-progress-bar{background:var(--progress-color-value)}.k-sort-handle{cursor:grab;z-index:1}.k-sort-handle:active{cursor:grabbing}.k-breadcrumb{--breadcrumb-divider: "/";overflow-x:clip;padding:2px}.k-breadcrumb ol{display:none;gap:.125rem;align-items:center}.k-breadcrumb ol li{display:flex;align-items:center;min-width:0;transition:flex-shrink .1s}.k-breadcrumb ol li:has(.k-icon){min-width:2.25rem}.k-breadcrumb ol li:not(:last-child):after{content:var(--breadcrumb-divider);opacity:.175;flex-shrink:0}.k-breadcrumb .k-icon[data-type=loader]{opacity:.5}.k-breadcrumb ol li:is(:hover,:focus-within){flex-shrink:0}.k-button.k-breadcrumb-link{flex-shrink:1;min-width:0;justify-content:flex-start}.k-breadcrumb-dropdown{display:grid}.k-breadcrumb-dropdown .k-dropdown-content{width:15rem}@container (min-width: 40em){.k-breadcrumb ol{display:flex}.k-breadcrumb-dropdown{display:none}}.k-browser{container-type:inline-size;font-size:var(--text-sm)}.k-browser-items{--browser-item-gap: 1px;--browser-item-size: 1fr;--browser-item-height: var(--height-sm);--browser-item-padding: .25rem;--browser-item-rounded: var(--rounded);display:grid;column-gap:var(--browser-item-gap);row-gap:var(--browser-item-gap);grid-template-columns:repeat(auto-fill,minmax(var(--browser-item-size),1fr))}.k-browser-item{display:flex;overflow:hidden;gap:.5rem;align-items:center;flex-shrink:0;height:var(--browser-item-height);padding-inline:calc(var(--browser-item-padding) + 1px);border-radius:var(--browser-item-rounded);white-space:nowrap;cursor:pointer}.k-browser-item-image{height:calc(var(--browser-item-height) - var(--browser-item-padding) * 2);aspect-ratio:1/1;border-radius:var(--rounded-sm);box-shadow:var(--shadow);flex-shrink:0}.k-browser-item-image.k-icon-frame{box-shadow:none;background:var(--color-white)}.k-browser-item-image svg{transform:scale(.8)}.k-browser-item input{position:absolute;box-shadow:var(--shadow);opacity:0;width:0}.k-browser-item[aria-selected]{background:var(--color-blue-300)}:root{--button-align: center;--button-height: var(--height-md);--button-width: auto;--button-color-back: none;--button-color-text: currentColor;--button-color-icon: currentColor;--button-padding: var(--spacing-2);--button-rounded: var(--spacing-1);--button-text-display: block;--button-icon-display: block}.k-button{position:relative;display:inline-flex;align-items:center;justify-content:var(--button-align);gap:.5rem;padding-inline:var(--button-padding);white-space:nowrap;line-height:1;border-radius:var(--button-rounded);background:var(--button-color-back);height:var(--button-height);width:var(--button-width);color:var(--button-color-text);font-variant-numeric:tabular-nums;overflow-x:clip;text-align:var(--button-align);flex-shrink:0}.k-button-icon{--icon-color: var(--button-color-icon);flex-shrink:0;display:var(--button-icon-display)}.k-button-text{text-overflow:ellipsis;overflow-x:clip;display:var(--button-text-display);min-width:0}.k-button:where([data-theme]){--button-color-icon: var(--theme-color-icon);--button-color-text: var(--theme-color-text)}.k-button:where([data-theme$=-icon]){--button-color-text: currentColor}.k-button:where([data-variant=dimmed]){--button-color-icon: var(--color-text);--button-color-text: var(--color-text-dimmed)}.k-button:where([data-variant=dimmed]):not([aria-disabled]):is(:hover,[aria-current]) .k-button-text{filter:brightness(75%)}.k-button:where([data-variant=dimmed][data-theme]){--button-color-icon: var(--theme-color-icon);--button-color-text: var(--theme-color-text-dimmed)}.k-button:where([data-variant=dimmed][data-theme$=-icon]){--button-color-text: var(--color-text-dimmed)}.k-button:where([data-variant=filled]){--button-color-back: var(--color-gray-300)}.k-button:where([data-variant=filled]):not([aria-disabled]):hover{filter:brightness(97%)}.k-button:where([data-variant=filled][data-theme]){--button-color-icon: var(--theme-color-700);--button-color-back: var(--theme-color-back)}.k-button:where([data-theme$=-icon][data-variant=filled]){--button-color-icon: hsl( var(--theme-color-hs), 57% );--button-color-back: var(--color-gray-300)}.k-button:not([data-has-text=true]){--button-padding: 0;aspect-ratio:1/1}@container (max-width: 30rem){.k-button[data-responsive=true][data-has-icon=true]{--button-padding: 0;aspect-ratio:1/1;--button-text-display: none}.k-button[data-responsive=text][data-has-text=true]{--button-icon-display: none}.k-button[data-responsive][data-has-icon=true] .k-button-arrow{display:none}}.k-button:not(button,a,summary,label,.k-link){pointer-events:none}.k-button:where([data-size=xs]){--button-height: var(--height-xs);--button-padding: .325rem}.k-button:where([data-size=sm]){--button-height: var(--height-sm);--button-padding: .5rem}.k-button:where([data-size=lg]){--button-height: var(--height-lg)}.k-button-arrow{width:max-content;margin-inline-start:-.25rem;margin-inline-end:-.125rem}.k-button:where([aria-disabled]){cursor:not-allowed}.k-button:where([aria-disabled])>*{opacity:var(--opacity-disabled)}.k-button-group{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.k-button-group:where([data-layout=collapsed]){gap:0;flex-wrap:nowrap}.k-button-group[data-layout=collapsed]>.k-button[data-variant=filled]:not(:last-child){border-start-end-radius:0;border-end-end-radius:0}.k-button-group[data-layout=collapsed]>.k-button[data-variant=filled]:not(:first-child){border-start-start-radius:0;border-end-start-radius:0;border-left:1px solid var(--theme-color-500, var(--color-gray-400))}.k-button-group[data-layout=collapsed]>.k-button[data-variant=filled]:focus-visible{z-index:1;border-radius:var(--button-rounded)}.k-file-browser{container-type:inline-size;overflow:hidden}.k-file-browser-layout{display:grid;grid-template-columns:minmax(10rem,15rem) 1fr;grid-template-rows:1fr auto;grid-template-areas:"tree items" "tree pagination"}.k-file-browser-tree{grid-area:tree;padding:var(--spacing-2);border-right:1px solid var(--color-gray-300)}.k-file-browser-items{grid-area:items;padding:var(--spacing-2);background:var(--color-gray-100)}.k-file-browser-back-button{display:none}.k-file-browser-pagination{background:var(--color-gray-100);padding:var(--spacing-2);display:flex;justify-content:end}@container (max-width: 30rem){.k-file-browser-layout{grid-template-columns:minmax(0,1fr);min-height:10rem}.k-file-browser-back-button{width:100%;height:var(--height-sm);display:flex;align-items:center;justify-content:flex-start;padding-inline:.25rem;margin-bottom:.5rem;background:var(--color-gray-200);border-radius:var(--rounded)}.k-file-browser-tree{border-right:0}.k-file-browser-pagination{justify-content:start}.k-file-browser[data-view=files] .k-file-browser-layout{grid-template-rows:1fr auto;grid-template-areas:"items" "pagination"}.k-file-browser[data-view=files] .k-file-browser-tree,.k-file-browser[data-view=tree] .k-file-browser-items,.k-file-browser[data-view=tree] .k-file-browser-pagination{display:none}}:root{--tree-color-back: var(--color-gray-200);--tree-color-hover-back: var(--color-gray-300);--tree-color-selected-back: var(--color-blue-300);--tree-color-selected-text: var(--color-black);--tree-color-text: var(--color-gray-dimmed);--tree-level: 0;--tree-indentation: .6rem}.k-tree-branch{display:flex;align-items:center;padding-inline-start:calc(var(--tree-level) * var(--tree-indentation));margin-bottom:1px}.k-tree-branch[data-has-subtree=true]{inset-block-start:calc(var(--tree-level) * 1.5rem);z-index:calc(100 - var(--tree-level));background:var(--tree-color-back)}.k-tree-branch:hover,li[aria-current]>.k-tree-branch{--tree-color-text: var(--tree-color-selected-text);background:var(--tree-color-hover-back);border-radius:var(--rounded)}li[aria-current]>.k-tree-branch{background:var(--tree-color-selected-back)}.k-tree-toggle{--icon-size: 12px;width:1rem;aspect-ratio:1/1;display:grid;place-items:center;padding:0;border-radius:var(--rounded-sm);margin-inline-start:.25rem;flex-shrink:0}.k-tree-toggle:hover{background:#00000013}.k-tree-toggle[disabled]{visibility:hidden}.k-tree-folder{display:flex;height:var(--height-sm);border-radius:var(--rounded-sm);padding-inline:.25rem;width:100%;align-items:center;gap:.325rem;min-width:3rem;line-height:1.25;font-size:var(--text-sm)}@container (max-width: 15rem){.k-tree{--tree-indentation: .375rem}.k-tree-folder{padding-inline:.125rem}.k-tree-folder .k-icon{display:none}}.k-tree-folder>.k-frame{flex-shrink:0}.k-tree-folder-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:currentColor}.k-tree-folder[disabled]{opacity:var(--opacity-disabled)}.k-pagination{flex-shrink:0}.k-pagination-details{--button-padding: var(--spacing-3);font-size:var(--text-xs)}.k-pagination-selector{--button-height: var(--height);--dropdown-padding: 0;overflow:visible}.k-pagination-selector form{display:flex;align-items:center;justify-content:space-between}.k-pagination-selector label{display:flex;align-items:center;gap:var(--spacing-2);padding-inline-start:var(--spacing-3)}.k-pagination-selector select{--height: calc(var(--button-height) - .5rem);width:auto;min-width:var(--height);height:var(--height);text-align:center;background:var(--color-gray-800);color:var(--color-white);border-radius:var(--rounded-sm)}.k-prev-next{direction:ltr;flex-shrink:0}.k-search-bar-input{--button-height: var(--input-height);display:flex;align-items:center}.k-search-bar-types{flex-shrink:0;border-inline-end:1px solid var(--color-border)}.k-search-bar-input input{flex-grow:1;padding-inline:.75rem;height:var(--input-height);line-height:var(--input-height);border-radius:var(--rounded);font-size:var(--input-font-size)}.k-search-bar-input input:focus{outline:0}.k-search-bar-input .k-search-bar-close{flex-shrink:0}.k-search-bar-results{border-top:1px solid var(--color-border);padding:1rem}.k-search-bar-results .k-item[data-selected=true]{outline:var(--outline)}.k-search-bar-footer{text-align:center}.k-search-bar-footer p{color:var(--color-text-dimmed)}.k-search-bar-footer .k-button{margin-top:var(--spacing-4)}:root{--tag-color-back: var(--color-black);--tag-color-text: var(--color-white);--tag-color-toggle: currentColor;--tag-color-disabled-back: var(--color-gray-600);--tag-color-disabled-text: var(--tag-color-text);--tag-height: var(--height-xs);--tag-rounded: var(--rounded-sm)}.k-tag{position:relative;height:var(--tag-height);max-width:100%;display:flex;align-items:center;justify-content:space-between;font-size:var(--text-sm);line-height:1;color:var(--tag-color-text);background-color:var(--tag-color-back);border-radius:var(--tag-rounded);cursor:pointer;-webkit-user-select:none;user-select:none}.k-tag:not([aria-disabled]):focus{outline:var(--outline)}.k-tag-image{height:100%;border-radius:var(--rounded-xs);overflow:hidden;flex-shrink:0;border-radius:0;border-start-start-radius:var(--tag-rounded);border-end-start-radius:var(--tag-rounded);background-clip:padding-box}.k-tag-text{padding-inline:var(--spacing-2);line-height:var(--leading-tight);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.k-tag[data-has-toggle=true] .k-tag-text{padding-inline-end:0}.k-tag-toggle{--icon-size: 14px;width:var(--tag-height);height:var(--tag-height);filter:brightness(70%);flex-shrink:0}.k-tag-toggle:hover{filter:brightness(100%)}.k-tag:where([aria-disabled]){background-color:var(--tag-color-disabled-back);color:var(--tag-color-disabled-text);cursor:not-allowed}.k-button[data-disabled=true]{opacity:.5;pointer-events:none;cursor:default}.k-card-options>.k-button[data-disabled=true]{display:inline-flex}.k-section+.k-section{margin-top:var(--columns-block-gap)}.k-section-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-6);margin-bottom:var(--spacing-2)}.k-section-buttons{flex-shrink:0}.k-fields-section input[type=submit]{display:none}[data-locked=true] .k-fields-section{opacity:.2;pointer-events:none}.k-models-section[data-processing=true]{pointer-events:none}.k-models-section-search.k-input{--input-color-back: var(--color-gray-300);--input-color-border: transparent;margin-bottom:var(--spacing-3)}:root{--code-color-back: var(--color-black);--code-color-icon: var(--color-gray-500);--code-color-text: var(--color-gray-200, white);--code-font-family: var(--font-mono);--code-font-size: 1em;--code-inline-color-back: var(--color-blue-300);--code-inline-color-border: var(--color-blue-400);--code-inline-color-text: var(--color-blue-900);--code-inline-font-size: .9em;--code-padding: var(--spacing-3)}code{font-family:var(--code-font-family);font-size:var(--code-font-size);font-weight:var(--font-normal)}.k-code,.k-text pre{position:relative;display:block;max-width:100%;padding:var(--code-padding);border-radius:var(--rounded, .5rem);background:var(--code-color-back);color:var(--code-color-text);white-space:nowrap;overflow-y:hidden;overflow-x:auto;line-height:1.5;-moz-tab-size:2;tab-size:2}.k-code:not(code),.k-text pre{white-space:pre-wrap}.k-code:before{position:absolute;content:attr(data-language);inset-block-start:0;inset-inline-end:0;padding:.5rem .5rem .25rem .25rem;font-size:calc(.75 * var(--text-xs));background:var(--code-color-back);border-radius:var(--rounded, .5rem)}.k-text>code,.k-text *:not(pre)>code{display:inline-flex;padding-inline:var(--spacing-1);font-size:var(--code-inline-font-size);color:var(--code-inline-color-text);background:var(--code-inline-color-back);border-radius:var(--rounded);outline:1px solid var(--code-inline-color-border);outline-offset:-1px}:root{--text-h1: 2em;--text-h2: 1.75em;--text-h3: 1.5em;--text-h4: 1.25em;--text-h5: 1.125em;--text-h6: 1em;--font-h1: var(--font-semi);--font-h2: var(--font-semi);--font-h3: var(--font-semi);--font-h4: var(--font-semi);--font-h5: var(--font-semi);--font-h6: var(--font-semi);--leading-h1: 1.125;--leading-h2: 1.125;--leading-h3: 1.25;--leading-h4: 1.375;--leading-h5: 1.5;--leading-h6: 1.5}.k-headline{line-height:1.5em;font-weight:var(--font-bold)}.h1,.k-text h1,.k-headline[data-size=huge]{color:var(--color-h1, var(--color-h));font-family:var(--font-family-h1);font-size:var(--text-h1);font-weight:var(--font-h1);line-height:var(--leading-h1)}.h2,.k-text h2,.k-headline[data-size=large]{color:var(--color-h2, var(--color-h));font-family:var(--font-family-h2);font-size:var(--text-h2);font-weight:var(--font-h2);line-height:var(--leading-h2)}.h3,.k-text h3{color:var(--color-h3, var(--color-h));font-family:var(--font-family-h3);font-size:var(--text-h3);font-weight:var(--font-h3);line-height:var(--leading-h3)}.h4,.k-text h4,.k-headline[data-size=small]{color:var(--color-h4, var(--color-h));font-family:var(--font-family-h4);font-size:var(--text-h4);font-weight:var(--font-h4);line-height:var(--leading-h4)}.h5,.k-text h5{color:var(--color-h5, var(--color-h));font-family:var(--font-family-h5);font-size:var(--text-h5);font-weight:var(--font-h5);line-height:var(--leading-h5)}.h6,.k-text h6{color:var(--color-h6, var(--color-h));font-family:var(--font-family-h6);font-size:var(--text-h6);font-weight:var(--font-h6);line-height:var(--leading-h6)}.k-text>*+h6{margin-block-start:calc(var(--text-line-height) * 1.5em)}.k-headline[data-theme]{color:var(--theme)}.k-label{position:relative;display:flex;align-items:center;height:var(--height-xs);font-weight:var(--font-semi);min-width:0;flex:1}[aria-disabled] .k-label{opacity:var(--opacity-disabled);cursor:not-allowed}.k-label>a{display:inline-flex;height:var(--height-xs);align-items:center;padding-inline:var(--spacing-2);margin-inline-start:calc(-1 * var(--spacing-2));border-radius:var(--rounded);min-width:0}.k-label-text{text-overflow:ellipsis;white-space:nowrap;overflow-x:clip;min-width:0}.k-label abbr{font-size:var(--text-xs);color:var(--color-gray-500);margin-inline-start:var(--spacing-1)}.k-label abbr.k-label-invalid{display:none;color:var(--color-red-700)}:where(.k-field:has([data-invalid]),.k-section:has([data-invalid]))>header>.k-label abbr.k-label-invalid{display:inline-block}.k-field:has([data-invalid])>.k-field-header>.k-label abbr:has(+abbr.k-label-invalid){display:none}:root{--text-font-size: 1em;--text-line-height: 1.5;--link-color: var(--color-blue-800);--link-underline-offset: 2px}.k-text{font-size:var(--text-font-size);line-height:var(--text-line-height)}.k-text[data-size=tiny]{--text-font-size: var(--text-xs)}.k-text[data-size=small]{--text-font-size: var(--text-sm)}.k-text[data-size=medium]{--text-font-size: var(--text-md)}.k-text[data-size=large]{--text-font-size: var(--text-xl)}.k-text[data-align]{text-align:var(--align)}.k-text>:where(audio,blockquote,details,div,figure,h1,h2,h3,h4,h5,h6,hr,iframe,img,object,ol,p,picture,pre,table,ul)+*{margin-block-start:calc(var(--text-line-height) * 1em)}.k-text :where(.k-link,a){color:var(--link-color);text-decoration:underline;text-underline-offset:var(--link-underline-offset);border-radius:var(--rounded-xs);outline-offset:2px}.k-text ol,.k-text ul{padding-inline-start:1.75em}.k-text ol{list-style:numeric}.k-text ol>li{list-style:decimal}.k-text ul>li{list-style:disc}.k-text ul ul>li{list-style:circle}.k-text ul ul ul>li{list-style:square}.k-text blockquote{font-size:var(--text-lg);line-height:1.25;padding-inline-start:var(--spacing-4);border-inline-start:2px solid var(--color-black)}.k-text img{border-radius:var(--rounded)}.k-text iframe{width:100%;aspect-ratio:16/9;border-radius:var(--rounded)}.k-text hr{background:var(--color-border);height:1px}.k-help{color:var(--color-text-dimmed)}.k-upload-item-preview{--icon-size: 24px;grid-area:preview;display:flex;aspect-ratio:1/1;width:100%;height:100%;overflow:hidden;border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded)}.k-upload-item-preview:focus{border-radius:var(--rounded);outline:2px solid var(--color-focus);z-index:1}.k-upload-item{accent-color:var(--color-focus);display:grid;grid-template-areas:"preview input input" "preview body toggle";grid-template-columns:6rem 1fr auto;grid-template-rows:var(--input-height) 1fr;border-radius:var(--rounded);background:var(--color-white);box-shadow:var(--shadow);min-height:6rem}.k-upload-item-body{grid-area:body;display:flex;flex-direction:column;justify-content:space-between;padding:var(--spacing-2) var(--spacing-3);min-width:0}.k-upload-item-input.k-input{--input-color-border: transparent;--input-padding: var(--spacing-2) var(--spacing-3);--input-rounded: 0;grid-area:input;font-size:var(--text-sm);border-bottom:1px solid var(--color-light);border-start-end-radius:var(--rounded)}.k-upload-item-input.k-input:focus-within{outline:2px solid var(--color-focus);z-index:1;border-radius:var(--rounded)}.k-upload-item-input.k-input[data-disabled=true]{--input-color-back: var(--color-white)}.k-upload-item-input .k-input-after{color:var(--color-gray-600)}.k-upload-item-meta{font-size:var(--text-xs);color:var(--color-gray-600)}.k-upload-item-error{font-size:var(--text-xs);margin-top:.25rem;color:var(--color-red-700)}.k-upload-item-progress{--progress-height: .25rem;--progress-color-back: var(--color-light);margin-bottom:.3125rem}.k-upload-item-toggle{grid-area:toggle;align-self:end}.k-upload-item-toggle>*{padding:var(--spacing-3)}.k-upload-item[data-completed] .k-upload-item-progress{--progress-color-value: var(--color-green-400)}.k-upload-items{display:grid;gap:.25rem}.k-activation{position:relative;display:flex;color:var(--dropdown-color-text);background:var(--dropdown-color-bg);border-radius:var(--dropdown-rounded);box-shadow:var(--dropdown-shadow);justify-content:space-between}.k-activation p{padding-inline-start:var(--spacing-3);padding-inline-end:var(--spacing-2);padding-block:.425rem;line-height:1.25}.k-activation p strong{font-weight:var(--font-normal);margin-inline-end:var(--spacing-1)}.k-activation p :where(button,a){color:var(--color-pink-400);text-decoration:underline;text-decoration-color:currentColor;text-underline-offset:2px;border-radius:var(--rounded-sm)}.k-activation-toggle{--button-color-text: var(--color-gray-400);--button-rounded: 0;border-left:1px solid var(--dropdown-color-hr)}.k-activation-toggle:is(:hover,:focus){--button-color-text: var(--color-white)}.k-activation-toggle:focus{--button-rounded: var(--rounded)}:root{--main-padding-inline: clamp(var(--spacing-6), 5cqw, var(--spacing-24))}.k-panel-main{min-height:100vh;min-height:100dvh;padding:var(--spacing-3) var(--main-padding-inline) var(--spacing-24);container:main / inline-size;margin-inline-start:var(--main-start)}.k-panel-notification{--button-height: var(--height-md);--button-color-icon: var(--theme-color-900);--button-color-text: var(--theme-color-900);border:1px solid var(--theme-color-500);position:fixed;inset-block-end:var(--menu-padding);inset-inline-end:var(--menu-padding);box-shadow:var(--dropdown-shadow);z-index:var(--z-notification)}:root{--menu-button-height: var(--height);--menu-button-width: 100%;--menu-color-back: var(--color-gray-250);--menu-color-border: var(--color-gray-300);--menu-display: none;--menu-display-backdrop: block;--menu-padding: var(--spacing-3);--menu-shadow: var(--shadow-xl);--menu-toggle-height: var(--menu-button-height);--menu-toggle-width: 1rem;--menu-width-closed: calc( var(--menu-button-height) + 2 * var(--menu-padding) );--menu-width-open: 12rem;--menu-width: var(--menu-width-open)}.k-panel-menu{position:fixed;inset-inline-start:0;inset-block:0;z-index:var(--z-navigation);display:var(--menu-display);width:var(--menu-width);background-color:var(--menu-color-back);border-right:1px solid var(--menu-color-border);box-shadow:var(--menu-shadow)}.k-panel-menu-body{display:flex;flex-direction:column;gap:var(--spacing-4);padding:var(--menu-padding);overscroll-behavior:contain;overflow-x:hidden;overflow-y:auto;height:100%}.k-panel-menu-search{margin-bottom:var(--spacing-8)}.k-panel-menu-buttons{display:flex;flex-direction:column;width:100%}.k-panel-menu-buttons[data-second-last=true]{flex-grow:1}.k-panel-menu-buttons:last-child{justify-content:flex-end}.k-panel-menu-button{--button-align: flex-start;--button-height: var(--menu-button-height);--button-width: var(--menu-button-width);--button-padding: 7px;flex-shrink:0}.k-panel-menu-button[aria-current]{--button-color-back: var(--color-white);box-shadow:var(--shadow)}.k-panel-menu-button:focus{z-index:1}.k-panel[data-menu=true]{--menu-button-width: 100%;--menu-display: block;--menu-width: var(--menu-width-open)}.k-panel[data-menu=true]:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-backdrop);display:var(--menu-display-backdrop);pointer-events:none;z-index:var(--z-drawer)}.k-panel-menu-toggle{--button-align: flex-start;--button-height: 100%;--button-width: var(--menu-toggle-width);position:absolute;inset-block:0;inset-inline-start:100%;align-items:flex-start;border-radius:0;overflow:visible;opacity:0;transition:opacity .2s}.k-panel-menu-toggle:focus{outline:0}.k-panel-menu-toggle .k-button-icon{display:grid;place-items:center;height:var(--menu-toggle-height);width:var(--menu-toggle-width);margin-top:var(--menu-padding);border-block:1px solid var(--menu-color-border);border-inline-end:1px solid var(--menu-color-border);background:var(--menu-color-back);border-start-end-radius:var(--button-rounded);border-end-end-radius:var(--button-rounded)}@media (max-width: 60rem){.k-panel-menu .k-activation-button{margin-bottom:var(--spacing-3)}.k-panel-menu .k-activation-toggle{display:none}}@media (min-width: 60rem){.k-panel{--menu-display: block;--menu-display-backdrop: none;--menu-shadow: none;--main-start: var(--menu-width)}.k-panel[data-menu=false]{--menu-button-width: var(--menu-button-height);--menu-width: var(--menu-width-closed)}.k-panel-menu-proxy{display:none}.k-panel-menu-toggle:focus-visible,.k-panel-menu[data-hover] .k-panel-menu-toggle{opacity:1}.k-panel-menu-toggle:focus-visible .k-button-icon{outline:var(--outline);border-radius:var(--button-rounded)}.k-panel-menu-search[aria-disabled=true]{opacity:0}.k-panel-menu .k-activation{position:absolute;bottom:var(--menu-padding);inset-inline-start:100%;height:var(--height-md);width:max-content;margin-left:var(--menu-padding)}.k-panel-menu .k-activation:before{position:absolute;content:"";top:50%;left:-4px;margin-top:-4px;border-top:4px solid transparent;border-right:4px solid var(--color-black);border-bottom:4px solid transparent}.k-panel-menu .k-activation p :where(button,a){padding-inline:var(--spacing-1)}.k-panel-menu .k-activation-toggle{border-left:1px solid var(--dropdown-color-hr)}}.k-panel.k-panel-outside{display:grid;grid-template-rows:1fr;place-items:center;min-height:100vh;min-height:100dvh;padding:var(--spacing-6)}:root{--scroll-top: 0rem}html{overflow-x:hidden;overflow-y:scroll;background:var(--color-light)}body{font-size:var(--text-sm)}.k-panel[data-loading=true]{animation:LoadingCursor .5s}.k-panel[data-loading=true]:after,.k-panel[data-dragging=true]{-webkit-user-select:none;user-select:none}.k-topbar{position:relative;margin-inline:calc(var(--button-padding) * -1);margin-bottom:var(--spacing-8);display:flex;align-items:center;gap:var(--spacing-1)}.k-topbar-breadcrumb{margin-inline-start:-2px;flex-shrink:1;min-width:0}.k-topbar-spacer{flex-grow:1}.k-topbar-signals{display:flex;align-items:center}.k-search-view .k-header{margin-bottom:0}.k-header+.k-search-view-results{margin-top:var(--spacing-12)}.k-search-view-input{--input-color-border: transparent;--input-color-back: var(--color-gray-300);--input-height: var(--height-md);width:40cqw}.k-file-view-header,.k-file-view[data-has-tabs=true] .k-file-preview{margin-bottom:0}.k-file-preview{display:grid;align-items:stretch;background:var(--color-gray-900);border-radius:var(--rounded-lg);margin-bottom:var(--spacing-12);overflow:hidden}.k-file-preview-thumb-column{background:var(--pattern);aspect-ratio:1/1}.k-file-preview-thumb{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--spacing-12);container-type:size}.k-file-preview-thumb img{width:auto;max-width:100cqw;max-height:100cqh}.k-file-preview-thumb>.k-icon{--icon-size: 3rem}.k-file-preview-thumb>.k-button{position:absolute;top:var(--spacing-2);inset-inline-start:var(--spacing-2)}.k-file-preview .k-coords-input{--opacity-disabled: 1;--range-thumb-color: hsl(216 60% 60% / .75);--range-thumb-size: 1.25rem;--range-thumb-shadow: none;cursor:crosshair}.k-file-preview .k-coords-input-thumb:after{--size: .4rem;--pos: calc(50% - (var(--size) / 2));position:absolute;top:var(--pos);inset-inline-start:var(--pos);width:var(--size);height:var(--size);content:"";background:var(--color-white);border-radius:50%}.k-file-preview:not([data-has-focus=true]) .k-coords-input-thumb{display:none}.k-file-preview-details{display:grid}.k-file-preview-details dl{display:grid;grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));grid-gap:var(--spacing-6) var(--spacing-12);align-self:center;line-height:1.5em;padding:var(--spacing-6)}.k-file-preview-details dt{font-size:var(--text-sm);font-weight:500;font-weight:var(--font-semi);color:var(--color-gray-500);margin-bottom:var(--spacing-1)}.k-file-preview-details :where(dd,a){font-size:var(--text-xs);color:#ffffff80;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#ffffffbf;font-size:var(--text-sm)}.k-file-preview-focus-info dd{display:flex;align-items:center}.k-file-preview-focus-info .k-button{--button-padding: var(--spacing-2);--button-color-back: var(--color-gray-800)}.k-file-preview[data-has-focus=true] .k-file-preview-focus-info .k-button{flex-direction:row-reverse}@container (min-width: 36rem){.k-file-preview{grid-template-columns:50% auto}.k-file-preview-thumb-column{aspect-ratio:auto}}@container (min-width: 65rem){.k-file-preview{grid-template-columns:33.333% auto}.k-file-preview-thumb-column{aspect-ratio:1/1}}@container (min-width: 90rem){.k-file-preview-layout{grid-template-columns:25% auto}}.k-installation-dialog{--dialog-color-back: var(--color-white);--dialog-shadow: var(--shadow);container-type:inline-size}.k-installation-view .k-button{margin-top:var(--spacing-3);width:100%}.k-installation-view form .k-button{margin-top:var(--spacing-10)}.k-installation-view .k-headline{font-weight:var(--font-semi);margin-top:-.5rem;margin-bottom:.75rem}.k-installation-issues{line-height:1.5em;font-size:var(--text-sm)}.k-installation-issues li{position:relative;padding:var(--spacing-6);background:var(--color-red-300);padding-inline-start:3.5rem;border-radius:var(--rounded)}.k-installation-issues .k-icon{position:absolute;top:calc(1.5rem + 2px);inset-inline-start:1.5rem}.k-installation-issues .k-icon{color:var(--color-red-700)}.k-installation-issues li:not(:last-child){margin-bottom:2px}.k-installation-issues li code{font:inherit;color:var(--color-red-700)}.k-login-code-form .k-user-info{margin-bottom:var(--spacing-6)}.k-login-form{position:relative}.k-login-form label abbr{visibility:hidden}.k-login-toggler{position:absolute;top:-2px;inset-inline-end:calc(var(--spacing-2) * -1);color:var(--link-color);text-decoration:underline;text-decoration-color:var(--link-color);text-underline-offset:1px;height:var(--height-xs);line-height:1;padding-inline:var(--spacing-2);border-radius:var(--rounded);z-index:1}.k-login{--dialog-color-back: var(--color-white);--dialog-shadow: var(--shadow);container-type:inline-size}.k-login-buttons{--button-padding: var(--spacing-3);display:flex;gap:1.5rem;align-items:center;justify-content:space-between;margin-top:var(--spacing-10)}.k-page-view[data-has-tabs=true] .k-page-view-header,.k-site-view[data-has-tabs=true] .k-site-view-header{margin-bottom:0}.k-user-name-placeholder{color:var(--color-gray-500);transition:color .3s}.k-user-view-header[data-editable=true] .k-user-name-placeholder:hover{color:var(--color-gray-900)}.k-user-view-header{margin-bottom:0;border-bottom:0}.k-user-view .k-user-profile{margin-bottom:var(--spacing-12)}.k-user-view[data-has-tabs=true] .k-user-profile{margin-bottom:0}.k-password-reset-view .k-user-info{margin-bottom:var(--spacing-8)}.k-user-view-image{padding:0}.k-user-view-image .k-frame{width:6rem;height:6rem;border-radius:var(--rounded);line-height:0}.k-user-view-image .k-icon-frame{--back: var(--color-black);--icon-color: var(--color-gray-200)}.k-user-info{display:flex;align-items:center;font-size:var(--text-sm);height:var(--height-lg);gap:.75rem;padding-inline:var(--spacing-2);background:var(--color-white);box-shadow:var(--shadow)}.k-user-info :where(.k-image-frame,.k-icon-frame){width:1.5rem;border-radius:var(--rounded-sm)}.k-user-profile{--button-height: auto;padding:var(--spacing-2);background:var(--color-white);border-radius:var(--rounded-lg);display:flex;align-items:center;gap:var(--spacing-3);box-shadow:var(--shadow)}.k-user-profile .k-button-group{display:flex;flex-direction:column;align-items:flex-start}.k-users-view-header{margin-bottom:0}.k-system-info .k-stat-label{color:var(--theme, var(--color-black))}.k-table-update-status-cell{padding:0 .75rem;display:flex;align-items:center;height:100%}.k-table-update-status-cell-version,.k-table-update-status-cell-button{font-variant-numeric:tabular-nums}.k-plugin-info{display:grid;column-gap:var(--spacing-3);row-gap:2px;padding:var(--button-padding)}.k-plugin-info dt{color:var(--color-gray-400)}.k-plugin-info dd[data-theme]{color:var(--theme-color-600)}@container (max-width: 30em){.k-plugin-info dd:not(:last-of-type){margin-bottom:var(--spacing-2)}}@container (min-width: 30em){.k-plugin-info{width:20rem;grid-template-columns:1fr auto}}:root{--color-l-100: 98%;--color-l-200: 94%;--color-l-300: 88%;--color-l-400: 80%;--color-l-500: 70%;--color-l-600: 60%;--color-l-700: 45%;--color-l-800: 30%;--color-l-900: 15%;--color-red-h: 0;--color-red-s: 80%;--color-red-hs: var(--color-red-h), var(--color-red-s);--color-red-boost: 3%;--color-red-l-100: calc(var(--color-l-100) + var(--color-red-boost));--color-red-l-200: calc(var(--color-l-200) + var(--color-red-boost));--color-red-l-300: calc(var(--color-l-300) + var(--color-red-boost));--color-red-l-400: calc(var(--color-l-400) + var(--color-red-boost));--color-red-l-500: calc(var(--color-l-500) + var(--color-red-boost));--color-red-l-600: calc(var(--color-l-600) + var(--color-red-boost));--color-red-l-700: calc(var(--color-l-700) + var(--color-red-boost));--color-red-l-800: calc(var(--color-l-800) + var(--color-red-boost));--color-red-l-900: calc(var(--color-l-900) + var(--color-red-boost));--color-red-100: hsl(var(--color-red-hs), var(--color-red-l-100));--color-red-200: hsl(var(--color-red-hs), var(--color-red-l-200));--color-red-300: hsl(var(--color-red-hs), var(--color-red-l-300));--color-red-400: hsl(var(--color-red-hs), var(--color-red-l-400));--color-red-500: hsl(var(--color-red-hs), var(--color-red-l-500));--color-red-600: hsl(var(--color-red-hs), var(--color-red-l-600));--color-red-700: hsl(var(--color-red-hs), var(--color-red-l-700));--color-red-800: hsl(var(--color-red-hs), var(--color-red-l-800));--color-red-900: hsl(var(--color-red-hs), var(--color-red-l-900));--color-orange-h: 28;--color-orange-s: 80%;--color-orange-hs: var(--color-orange-h), var(--color-orange-s);--color-orange-boost: 2.5%;--color-orange-l-100: calc(var(--color-l-100) + var(--color-orange-boost));--color-orange-l-200: calc(var(--color-l-200) + var(--color-orange-boost));--color-orange-l-300: calc(var(--color-l-300) + var(--color-orange-boost));--color-orange-l-400: calc(var(--color-l-400) + var(--color-orange-boost));--color-orange-l-500: calc(var(--color-l-500) + var(--color-orange-boost));--color-orange-l-600: calc(var(--color-l-600) + var(--color-orange-boost));--color-orange-l-700: calc(var(--color-l-700) + var(--color-orange-boost));--color-orange-l-800: calc(var(--color-l-800) + var(--color-orange-boost));--color-orange-l-900: calc(var(--color-l-900) + var(--color-orange-boost));--color-orange-100: hsl(var(--color-orange-hs), var(--color-orange-l-100));--color-orange-200: hsl(var(--color-orange-hs), var(--color-orange-l-200));--color-orange-300: hsl(var(--color-orange-hs), var(--color-orange-l-300));--color-orange-400: hsl(var(--color-orange-hs), var(--color-orange-l-400));--color-orange-500: hsl(var(--color-orange-hs), var(--color-orange-l-500));--color-orange-600: hsl(var(--color-orange-hs), var(--color-orange-l-600));--color-orange-700: hsl(var(--color-orange-hs), var(--color-orange-l-700));--color-orange-800: hsl(var(--color-orange-hs), var(--color-orange-l-800));--color-orange-900: hsl(var(--color-orange-hs), var(--color-orange-l-900));--color-yellow-h: 47;--color-yellow-s: 80%;--color-yellow-hs: var(--color-yellow-h), var(--color-yellow-s);--color-yellow-boost: 0%;--color-yellow-l-100: calc(var(--color-l-100) + var(--color-yellow-boost));--color-yellow-l-200: calc(var(--color-l-200) + var(--color-yellow-boost));--color-yellow-l-300: calc(var(--color-l-300) + var(--color-yellow-boost));--color-yellow-l-400: calc(var(--color-l-400) + var(--color-yellow-boost));--color-yellow-l-500: calc(var(--color-l-500) + var(--color-yellow-boost));--color-yellow-l-600: calc(var(--color-l-600) + var(--color-yellow-boost));--color-yellow-l-700: calc(var(--color-l-700) + var(--color-yellow-boost));--color-yellow-l-800: calc(var(--color-l-800) + var(--color-yellow-boost));--color-yellow-l-900: calc(var(--color-l-900) + var(--color-yellow-boost));--color-yellow-100: hsl(var(--color-yellow-hs), var(--color-yellow-l-100));--color-yellow-200: hsl(var(--color-yellow-hs), var(--color-yellow-l-200));--color-yellow-300: hsl(var(--color-yellow-hs), var(--color-yellow-l-300));--color-yellow-400: hsl(var(--color-yellow-hs), var(--color-yellow-l-400));--color-yellow-500: hsl(var(--color-yellow-hs), var(--color-yellow-l-500));--color-yellow-600: hsl(var(--color-yellow-hs), var(--color-yellow-l-600));--color-yellow-700: hsl(var(--color-yellow-hs), var(--color-yellow-l-700));--color-yellow-800: hsl(var(--color-yellow-hs), var(--color-yellow-l-800));--color-yellow-900: hsl(var(--color-yellow-hs), var(--color-yellow-l-900));--color-green-h: 80;--color-green-s: 60%;--color-green-hs: var(--color-green-h), var(--color-green-s);--color-green-boost: -2.5%;--color-green-l-100: calc(var(--color-l-100) + var(--color-green-boost));--color-green-l-200: calc(var(--color-l-200) + var(--color-green-boost));--color-green-l-300: calc(var(--color-l-300) + var(--color-green-boost));--color-green-l-400: calc(var(--color-l-400) + var(--color-green-boost));--color-green-l-500: calc(var(--color-l-500) + var(--color-green-boost));--color-green-l-600: calc(var(--color-l-600) + var(--color-green-boost));--color-green-l-700: calc(var(--color-l-700) + var(--color-green-boost));--color-green-l-800: calc(var(--color-l-800) + var(--color-green-boost));--color-green-l-900: calc(var(--color-l-900) + var(--color-green-boost));--color-green-100: hsl(var(--color-green-hs), var(--color-green-l-100));--color-green-200: hsl(var(--color-green-hs), var(--color-green-l-200));--color-green-300: hsl(var(--color-green-hs), var(--color-green-l-300));--color-green-400: hsl(var(--color-green-hs), var(--color-green-l-400));--color-green-500: hsl(var(--color-green-hs), var(--color-green-l-500));--color-green-600: hsl(var(--color-green-hs), var(--color-green-l-600));--color-green-700: hsl(var(--color-green-hs), var(--color-green-l-700));--color-green-800: hsl(var(--color-green-hs), var(--color-green-l-800));--color-green-900: hsl(var(--color-green-hs), var(--color-green-l-900));--color-aqua-h: 180;--color-aqua-s: 50%;--color-aqua-hs: var(--color-aqua-h), var(--color-aqua-s);--color-aqua-boost: 0%;--color-aqua-l-100: calc(var(--color-l-100) + var(--color-aqua-boost));--color-aqua-l-200: calc(var(--color-l-200) + var(--color-aqua-boost));--color-aqua-l-300: calc(var(--color-l-300) + var(--color-aqua-boost));--color-aqua-l-400: calc(var(--color-l-400) + var(--color-aqua-boost));--color-aqua-l-500: calc(var(--color-l-500) + var(--color-aqua-boost));--color-aqua-l-600: calc(var(--color-l-600) + var(--color-aqua-boost));--color-aqua-l-700: calc(var(--color-l-700) + var(--color-aqua-boost));--color-aqua-l-800: calc(var(--color-l-800) + var(--color-aqua-boost));--color-aqua-l-900: calc(var(--color-l-900) + var(--color-aqua-boost));--color-aqua-100: hsl(var(--color-aqua-hs), var(--color-aqua-l-100));--color-aqua-200: hsl(var(--color-aqua-hs), var(--color-aqua-l-200));--color-aqua-300: hsl(var(--color-aqua-hs), var(--color-aqua-l-300));--color-aqua-400: hsl(var(--color-aqua-hs), var(--color-aqua-l-400));--color-aqua-500: hsl(var(--color-aqua-hs), var(--color-aqua-l-500));--color-aqua-600: hsl(var(--color-aqua-hs), var(--color-aqua-l-600));--color-aqua-700: hsl(var(--color-aqua-hs), var(--color-aqua-l-700));--color-aqua-800: hsl(var(--color-aqua-hs), var(--color-aqua-l-800));--color-aqua-900: hsl(var(--color-aqua-hs), var(--color-aqua-l-900));--color-blue-h: 210;--color-blue-s: 65%;--color-blue-hs: var(--color-blue-h), var(--color-blue-s);--color-blue-boost: 3%;--color-blue-l-100: calc(var(--color-l-100) + var(--color-blue-boost));--color-blue-l-200: calc(var(--color-l-200) + var(--color-blue-boost));--color-blue-l-300: calc(var(--color-l-300) + var(--color-blue-boost));--color-blue-l-400: calc(var(--color-l-400) + var(--color-blue-boost));--color-blue-l-500: calc(var(--color-l-500) + var(--color-blue-boost));--color-blue-l-600: calc(var(--color-l-600) + var(--color-blue-boost));--color-blue-l-700: calc(var(--color-l-700) + var(--color-blue-boost));--color-blue-l-800: calc(var(--color-l-800) + var(--color-blue-boost));--color-blue-l-900: calc(var(--color-l-900) + var(--color-blue-boost));--color-blue-100: hsl(var(--color-blue-hs), var(--color-blue-l-100));--color-blue-200: hsl(var(--color-blue-hs), var(--color-blue-l-200));--color-blue-300: hsl(var(--color-blue-hs), var(--color-blue-l-300));--color-blue-400: hsl(var(--color-blue-hs), var(--color-blue-l-400));--color-blue-500: hsl(var(--color-blue-hs), var(--color-blue-l-500));--color-blue-600: hsl(var(--color-blue-hs), var(--color-blue-l-600));--color-blue-700: hsl(var(--color-blue-hs), var(--color-blue-l-700));--color-blue-800: hsl(var(--color-blue-hs), var(--color-blue-l-800));--color-blue-900: hsl(var(--color-blue-hs), var(--color-blue-l-900));--color-purple-h: 275;--color-purple-s: 60%;--color-purple-hs: var(--color-purple-h), var(--color-purple-s);--color-purple-boost: 0%;--color-purple-l-100: calc(var(--color-l-100) + var(--color-purple-boost));--color-purple-l-200: calc(var(--color-l-200) + var(--color-purple-boost));--color-purple-l-300: calc(var(--color-l-300) + var(--color-purple-boost));--color-purple-l-400: calc(var(--color-l-400) + var(--color-purple-boost));--color-purple-l-500: calc(var(--color-l-500) + var(--color-purple-boost));--color-purple-l-600: calc(var(--color-l-600) + var(--color-purple-boost));--color-purple-l-700: calc(var(--color-l-700) + var(--color-purple-boost));--color-purple-l-800: calc(var(--color-l-800) + var(--color-purple-boost));--color-purple-l-900: calc(var(--color-l-900) + var(--color-purple-boost));--color-purple-100: hsl(var(--color-purple-hs), var(--color-purple-l-100));--color-purple-200: hsl(var(--color-purple-hs), var(--color-purple-l-200));--color-purple-300: hsl(var(--color-purple-hs), var(--color-purple-l-300));--color-purple-400: hsl(var(--color-purple-hs), var(--color-purple-l-400));--color-purple-500: hsl(var(--color-purple-hs), var(--color-purple-l-500));--color-purple-600: hsl(var(--color-purple-hs), var(--color-purple-l-600));--color-purple-700: hsl(var(--color-purple-hs), var(--color-purple-l-700));--color-purple-800: hsl(var(--color-purple-hs), var(--color-purple-l-800));--color-purple-900: hsl(var(--color-purple-hs), var(--color-purple-l-900));--color-pink-h: 320;--color-pink-s: 70%;--color-pink-hs: var(--color-pink-h), var(--color-pink-s);--color-pink-boost: 0%;--color-pink-l-100: calc(var(--color-l-100) + var(--color-pink-boost));--color-pink-l-200: calc(var(--color-l-200) + var(--color-pink-boost));--color-pink-l-300: calc(var(--color-l-300) + var(--color-pink-boost));--color-pink-l-400: calc(var(--color-l-400) + var(--color-pink-boost));--color-pink-l-500: calc(var(--color-l-500) + var(--color-pink-boost));--color-pink-l-600: calc(var(--color-l-600) + var(--color-pink-boost));--color-pink-l-700: calc(var(--color-l-700) + var(--color-pink-boost));--color-pink-l-800: calc(var(--color-l-800) + var(--color-pink-boost));--color-pink-l-900: calc(var(--color-l-900) + var(--color-pink-boost));--color-pink-100: hsl(var(--color-pink-hs), var(--color-pink-l-100));--color-pink-200: hsl(var(--color-pink-hs), var(--color-pink-l-200));--color-pink-300: hsl(var(--color-pink-hs), var(--color-pink-l-300));--color-pink-400: hsl(var(--color-pink-hs), var(--color-pink-l-400));--color-pink-500: hsl(var(--color-pink-hs), var(--color-pink-l-500));--color-pink-600: hsl(var(--color-pink-hs), var(--color-pink-l-600));--color-pink-700: hsl(var(--color-pink-hs), var(--color-pink-l-700));--color-pink-800: hsl(var(--color-pink-hs), var(--color-pink-l-800));--color-pink-900: hsl(var(--color-pink-hs), var(--color-pink-l-900));--color-gray-h: 0;--color-gray-s: 0%;--color-gray-hs: var(--color-gray-h), var(--color-gray-s);--color-gray-boost: 0%;--color-gray-l-100: calc(var(--color-l-100) + var(--color-gray-boost));--color-gray-l-200: calc(var(--color-l-200) + var(--color-gray-boost));--color-gray-l-300: calc(var(--color-l-300) + var(--color-gray-boost));--color-gray-l-400: calc(var(--color-l-400) + var(--color-gray-boost));--color-gray-l-500: calc(var(--color-l-500) + var(--color-gray-boost));--color-gray-l-600: calc(var(--color-l-600) + var(--color-gray-boost));--color-gray-l-700: calc(var(--color-l-700) + var(--color-gray-boost));--color-gray-l-800: calc(var(--color-l-800) + var(--color-gray-boost));--color-gray-l-900: calc(var(--color-l-900) + var(--color-gray-boost));--color-gray-100: hsl(var(--color-gray-hs), var(--color-gray-l-100));--color-gray-200: hsl(var(--color-gray-hs), var(--color-gray-l-200));--color-gray-250: #e8e8e8;--color-gray-300: hsl(var(--color-gray-hs), var(--color-gray-l-300));--color-gray-400: hsl(var(--color-gray-hs), var(--color-gray-l-400));--color-gray-500: hsl(var(--color-gray-hs), var(--color-gray-l-500));--color-gray-600: hsl(var(--color-gray-hs), var(--color-gray-l-600));--color-gray-700: hsl(var(--color-gray-hs), var(--color-gray-l-700));--color-gray-800: hsl(var(--color-gray-hs), var(--color-gray-l-800));--color-gray-900: hsl(var(--color-gray-hs), var(--color-gray-l-900));--color-backdrop: rgba(0, 0, 0, .6);--color-black: black;--color-border: var(--color-gray-300);--color-dark: var(--color-gray-900);--color-focus: var(--color-blue-600);--color-light: var(--color-gray-200);--color-text: var(--color-black);--color-text-dimmed: var(--color-gray-700);--color-white: white;--color-background: var(--color-light);--color-gray: var(--color-gray-600);--color-red: var(--color-red-600);--color-orange: var(--color-orange-600);--color-yellow: var(--color-yellow-600);--color-green: var(--color-green-600);--color-aqua: var(--color-aqua-600);--color-blue: var(--color-blue-600);--color-purple: var(--color-purple-600);--color-focus-light: var(--color-focus);--color-focus-outline: var(--color-focus);--color-negative: var(--color-red-700);--color-negative-light: var(--color-red-500);--color-negative-outline: var(--color-red-900);--color-notice: var(--color-orange-700);--color-notice-light: var(--color-orange-500);--color-positive: var(--color-green-700);--color-positive-light: var(--color-green-500);--color-positive-outline: var(--color-green-900);--color-text-light: var(--color-text-dimmed)}:root{--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-mono: "SFMono-Regular", Consolas, Liberation Mono, Menlo, Courier, monospace}:root{--text-xs: .75rem;--text-sm: .875rem;--text-md: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--text-3xl: 1.75rem;--text-4xl: 2.5rem;--text-5xl: 3rem;--text-6xl: 4rem;--text-base: var(--text-md);--font-size-tiny: var(--text-xs);--font-size-small: var(--text-sm);--font-size-medium: var(--text-base);--font-size-large: var(--text-xl);--font-size-huge: var(--text-2xl);--font-size-monster: var(--text-3xl)}:root{--font-thin: 300;--font-normal: 400;--font-semi: 500;--font-bold: 600}:root{--height-xs: 1.5rem;--height-sm: 1.75rem;--height-md: 2rem;--height-lg: 2.25rem;--height-xl: 2.5rem;--height: var(--height-md)}:root{--opacity-disabled: .5}:root{--rounded-xs: 1px;--rounded-sm: .125rem;--rounded-md: .25rem;--rounded-lg: .375rem;--rounded-xl: .5rem;--rounded: var(--rounded-md)}:root{--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .05), 0 1px 2px 0 rgba(0, 0, 0, .025);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .05);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .05);--shadow: var(--shadow-sm);--shadow-toolbar: rgba(0, 0, 0, .1) -2px 0 5px, var(--shadow), var(--shadow-xl);--shadow-outline: var(--color-focus, currentColor) 0 0 0 2px;--shadow-inset: inset 0 2px 4px 0 rgba(0, 0, 0, .06);--shadow-sticky: rgba(0, 0, 0, .05) 0 2px 5px;--box-shadow-dropdown: var(--shadow-dropdown);--box-shadow-item: var(--shadow);--box-shadow-focus: var(--shadow-xl);--shadow-dropdown: var(--shadow-lg);--shadow-item: var(--shadow-sm)}:root{--spacing-0: 0;--spacing-1: .25rem;--spacing-2: .5rem;--spacing-3: .75rem;--spacing-4: 1rem;--spacing-6: 1.5rem;--spacing-8: 2rem;--spacing-12: 3rem;--spacing-16: 4rem;--spacing-24: 6rem;--spacing-36: 9rem;--spacing-48: 12rem;--spacing-px: 1px;--spacing-2px: 2px;--spacing-5: 1.25rem;--spacing-10: 2.5rem;--spacing-20: 5rem}:root{--z-offline: 1200;--z-fatal: 1100;--z-loader: 1000;--z-notification: 900;--z-dialog: 800;--z-navigation: 700;--z-dropdown: 600;--z-drawer: 500;--z-dropzone: 400;--z-toolbar: 300;--z-content: 200;--z-background: 100}:root{--pattern-size: 16px;--pattern-light: repeating-conic-gradient( hsl(0, 0%, 100%) 0% 25%, hsl(0, 0%, 90%) 0% 50% ) 50% / var(--pattern-size) var(--pattern-size);--pattern-dark: repeating-conic-gradient( hsla(0, 0%, 15%) 0% 25%, hsl(0, 0%, 22%) 0% 50% ) 50% / var(--pattern-size) var(--pattern-size);--pattern: var(--pattern-dark)}:root{--container: 80rem;--leading-none: 1;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.625;--leading-loose: 2;--field-input-padding: var(--input-padding);--field-input-height: var(--input-height);--field-input-line-height: var(--input-leading);--field-input-font-size: var(--input-font-size);--bg-pattern: var(--pattern)}:root{--choice-color-back: var(--color-white);--choice-color-border: var(--color-gray-500);--choice-color-checked: var(--color-black);--choice-color-disabled: var(--color-gray-400);--choice-color-icon: var(--color-light);--choice-color-info: var(--color-text-dimmed);--choice-color-text: var(--color-text);--choice-color-toggle: var(--choice-color-disabled);--choice-height: 1rem;--choice-rounded: var(--rounded-sm)}input:where([type=checkbox],[type=radio]){position:relative;cursor:pointer;overflow:hidden;flex-shrink:0;height:var(--choice-height);aspect-ratio:1/1;border:1px solid var(--choice-color-border);-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--choice-rounded);background:var(--choice-color-back);box-shadow:var(--shadow-sm)}input:where([type=checkbox],[type=radio]):after{position:absolute;content:"";display:none;place-items:center;text-align:center}input:where([type=checkbox],[type=radio]):focus{outline:var(--outline);outline-offset:-1px;color:var(--color-focus)}input:where([type=checkbox]):checked{border-color:var(--choice-color-checked)}input:where([type=checkbox],[type=radio]):checked:after{background:var(--choice-color-checked);display:grid}input:where([type=checkbox],[type=radio]):checked:focus{--choice-color-checked: var(--color-focus)}input:where([type=checkbox],[type=radio])[disabled]{--choice-color-back: none;--choice-color-border: var(--color-gray-300);--choice-color-checked: var(--choice-color-disabled);box-shadow:none;cursor:not-allowed}input[type=checkbox]:checked:after{content:"✓";top:0;right:0;bottom:0;left:0;font-weight:700;color:var(--choice-color-icon);line-height:1}input[type=radio]{--choice-rounded: 50%}input[type=radio]:after{top:3px;right:3px;bottom:3px;left:3px;font-size:9px;border-radius:var(--choice-rounded)}input[type=checkbox][data-variant=toggle]{--choice-rounded: var(--choice-height);width:calc(var(--choice-height) * 2);aspect-ratio:2/1}input[type=checkbox][data-variant=toggle]:after{background:var(--choice-color-toggle);display:grid;top:1px;right:1px;bottom:1px;left:1px;width:.8rem;font-size:7px;border-radius:var(--choice-rounded);transition:margin-inline-start 75ms ease-in-out,background .1s ease-in-out}input[type=checkbox][data-variant=toggle]:checked{border-color:var(--choice-color-border)}input[type=checkbox][data-variant=toggle]:checked:after{background:var(--choice-color-checked);margin-inline-start:50%}:root{--range-thumb-color: var(--color-white);--range-thumb-focus-outline: var(--outline);--range-thumb-size: 1rem;--range-thumb-shadow: rgba(0, 0, 0, .1) 0 2px 4px 2px, rgba(0, 0, 0, .125) 0 0 0 1px;--range-track-back: var(--color-gray-250);--range-track-height: var(--range-thumb-size)}:where(input[type=range]){display:flex;align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;height:var(--range-thumb-size);border-radius:var(--range-track-size);width:100%}:where(input[type=range])::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--range-thumb-size);height:var(--range-thumb-size);border:0;background:var(--range-thumb-color);box-shadow:var(--range-thumb-shadow);transform:translateZ(0);margin-top:calc(((var(--range-thumb-size) - var(--range-track-height)) / 2) * -1);border-radius:50%;z-index:1;cursor:grab}:where(input[type=range])::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--range-thumb-size);height:var(--range-thumb-size);border:0;background:var(--range-thumb-color);box-shadow:var(--range-thumb-shadow);border-radius:50%;transform:translateZ(0);z-index:1;cursor:grab}:where(input[type=range])::-webkit-slider-thumb:active{cursor:grabbing}:where(input[type=range])::-moz-range-thumb:active{cursor:grabbing}:where(input[type=range])::-webkit-slider-runnable-track{background:var(--range-track-back);height:var(--range-track-height);border-radius:var(--range-track-height)}:where(input[type=range])::-moz-range-track{background:var(--range-track-back);height:var(--range-track-height);border-radius:var(--range-track-height)}:where(input[type=range][disabled]){--range-thumb-color: rgba(255, 255, 255, .2)}:where(input[type=range][disabled])::-webkit-slider-thumb{cursor:not-allowed}:where(input[type=range][disabled])::-moz-range-thumb{cursor:not-allowed}:where(input[type=range]):focus{outline:var(--outline)}:where(input[type=range]):focus::-webkit-slider-thumb{outline:var(--range-thumb-focus-outline)}:where(input[type=range]):focus::-moz-range-thumb{outline:var(--range-thumb-focus-outline)}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:where(b,strong){font-weight:var(--font-bold, 600)}:where([hidden]){display:none!important}:where(abbr){text-decoration:none}:where(input,button,textarea,select){border:0;font:inherit;line-height:inherit;color:inherit;background:none}:where(fieldset){border:0}:where(legend){width:100%;float:left}:where(legend+*){clear:both}:where(select){-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--color-white);color:var(--color-black);cursor:pointer}:where(textarea,select,input:not([type=checkbox],[type=radio],[type=reset],[type=submit])){width:100%;font-variant-numeric:tabular-nums}:where(textarea){resize:vertical;line-height:1.5}:where(input)::-webkit-calendar-picker-indicator{display:none}:where(input[type=search]){-webkit-appearance:none;-moz-appearance:none;appearance:none}:where(input)::-webkit-search-cancel-button{display:none}:where(button,label,select,summary,[role=button],[role=option]){cursor:pointer}:where(select[multiple]) option{display:flex;align-items:center}:where(input:-webkit-autofill){-webkit-text-fill-color:var(--input-color-text)!important;-webkit-background-clip:text}:where(:disabled){cursor:not-allowed}*::placeholder{color:var(--input-color-placeholder);opacity:1}:where(a){color:currentColor;text-decoration:none;text-underline-offset:.2ex}:where(ul,ol){list-style:none}:where(img,svg,video,canvas,audio,iframe,embed,object){display:block}:where(iframe){border:0}:where(img,picture,svg){max-inline-size:100%;block-size:auto}:where(p,h1,h2,h3,h4,h5,h6){overflow-wrap:break-word}:where(h1,h2,h3,h4,h5,h6){font:inherit}:where(:focus,:focus-visible,:focus-within){outline-color:var(--color-focus, currentColor);outline-offset:0}:where(:focus-visible){outline:var(--outline, 2px solid var(--color-focus, currentColor))}:where(:invalid){box-shadow:none;outline:0}:where(dialog){border:0;max-width:none;max-height:none}:where(hr){border:0}:where(table){font:inherit;width:100%;border-spacing:0;font-variant-numeric:tabular-nums}:where(table th){font:inherit;text-align:start}:where(svg){fill:currentColor}body{font-family:var(--font-sans, sans-serif);font-size:var(--text-sm);line-height:1;position:relative;accent-color:var(--color-focus, currentColor)}:where(sup,sub){position:relative;line-height:0;vertical-align:baseline;font-size:75%}:where(sup){top:-.5em}:where(sub){bottom:-.25em}:where(mark){background:var(--color-yellow-300)}:where(kbd){display:inline-block;padding-inline:var(--spacing-2);border-radius:var(--rounded);background:var(--color-white);box-shadow:var(--shadow)}[data-align=left]{--align: start}[data-align=center]{--align: center}[data-align=right]{--align: end}@keyframes LoadingCursor{to{cursor:progress}}@keyframes Spin{to{transform:rotate(360deg)}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}[data-theme]{--theme-color-h: 0;--theme-color-s: 0%;--theme-color-hs: var(--theme-color-h), var(--theme-color-s);--theme-color-boost: 3%;--theme-color-l-100: calc(var(--color-l-100) + var(--theme-color-boost));--theme-color-l-200: calc(var(--color-l-200) + var(--theme-color-boost));--theme-color-l-300: calc(var(--color-l-300) + var(--theme-color-boost));--theme-color-l-400: calc(var(--color-l-400) + var(--theme-color-boost));--theme-color-l-500: calc(var(--color-l-500) + var(--theme-color-boost));--theme-color-l-600: calc(var(--color-l-600) + var(--theme-color-boost));--theme-color-l-700: calc(var(--color-l-700) + var(--theme-color-boost));--theme-color-l-800: calc(var(--color-l-800) + var(--theme-color-boost));--theme-color-l-900: calc(var(--color-l-900) + var(--theme-color-boost));--theme-color-100: hsl(var(--theme-color-hs), var(--theme-color-l-100));--theme-color-200: hsl(var(--theme-color-hs), var(--theme-color-l-200));--theme-color-300: hsl(var(--theme-color-hs), var(--theme-color-l-300));--theme-color-400: hsl(var(--theme-color-hs), var(--theme-color-l-400));--theme-color-500: hsl(var(--theme-color-hs), var(--theme-color-l-500));--theme-color-600: hsl(var(--theme-color-hs), var(--theme-color-l-600));--theme-color-700: hsl(var(--theme-color-hs), var(--theme-color-l-700));--theme-color-800: hsl(var(--theme-color-hs), var(--theme-color-l-800));--theme-color-900: hsl(var(--theme-color-hs), var(--theme-color-l-900));--theme-color-text: var(--theme-color-900);--theme-color-text-dimmed: hsl( var(--theme-color-h), calc(var(--theme-color-s) - 60%), 50% );--theme-color-back: var(--theme-color-400);--theme-color-hover: var(--theme-color-500);--theme-color-icon: var(--theme-color-600)}[data-theme^=red],[data-theme^=error],[data-theme^=negative]{--theme-color-h: var(--color-red-h);--theme-color-s: var(--color-red-s);--theme-color-boost: var(--color-red-boost)}[data-theme^=orange],[data-theme^=notice]{--theme-color-h: var(--color-orange-h);--theme-color-s: var(--color-orange-s);--theme-color-boost: var(--color-orange-boost)}[data-theme^=yellow],[data-theme^=warning]{--theme-color-h: var(--color-yellow-h);--theme-color-s: var(--color-yellow-s);--theme-color-boost: var(--color-yellow-boost)}[data-theme^=blue],[data-theme^=info]{--theme-color-h: var(--color-blue-h);--theme-color-s: var(--color-blue-s);--theme-color-boost: var(--color-blue-boost)}[data-theme^=pink],[data-theme^=love]{--theme-color-h: var(--color-pink-h);--theme-color-s: var(--color-pink-s);--theme-color-boost: var(--color-pink-boost)}[data-theme^=green],[data-theme^=positive]{--theme-color-h: var(--color-green-h);--theme-color-s: var(--color-green-s);--theme-color-boost: var(--color-green-boost)}[data-theme^=aqua]{--theme-color-h: var(--color-aqua-h);--theme-color-s: var(--color-aqua-s);--theme-color-boost: var(--color-aqua-boost)}[data-theme^=purple]{--theme-color-h: var(--color-purple-h);--theme-color-s: var(--color-purple-s);--theme-color-boost: var(--color-purple-boost)}[data-theme^=gray],[data-theme^=passive]{--theme-color-h: var(--color-gray-h);--theme-color-s: var(--color-gray-s);--theme-color-boost: 10%}[data-theme^=white],[data-theme^=text]{--theme-color-back: var(--color-white);--theme-color-icon: var(--color-gray-800);--theme-color-text: var(--color-text);--color-h: var(--color-black)}[data-theme^=dark]{--theme-color-h: var(--color-gray-h);--theme-color-s: var(--color-gray-s);--theme-color-boost: var(--color-gray-boost);--theme-color-back: var(--color-gray-800);--theme-color-icon: var(--color-gray-500);--theme-color-text: var(--color-gray-200)}[data-theme=code]{--theme-color-back: var(--code-color-back);--theme-color-hover: var(--color-black);--theme-color-icon: var(--code-color-icon);--theme-color-text: var(--code-color-text);font-family:var(--code-font-family);font-size:var(--code-font-size)}[data-theme=empty]{--theme-color-back: var(--color-light);--theme-color-border: var(--color-gray-400);--theme-color-icon: var(--color-gray-600);--theme-color-text: var(--color-text-dimmed);border:1px dashed var(--theme-color-border)}[data-theme=none]{--theme-color-back: transparent;--theme-color-border: transparent;--theme-color-icon: var(--color-text);--theme-color-text: var(--color-text)}[data-theme]{--theme: var(--theme-color-700);--theme-light: var(--theme-color-500);--theme-bg: var(--theme-color-500)}:root{--outline: 2px solid var(--color-focus, currentColor)}.scroll-x,.scroll-x-auto,.scroll-y,.scroll-y-auto{-webkit-overflow-scrolling:touch;transform:translateZ(0)}.scroll-x{overflow-x:scroll;overflow-y:hidden}.scroll-x-auto{overflow-x:auto;overflow-y:hidden}.scroll-y{overflow-x:hidden;overflow-y:scroll}.scroll-y-auto{overflow-x:hidden;overflow-y:auto}.input-hidden{position:absolute;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:0;height:0;opacity:0}.k-lab-index-view .k-header{margin-bottom:0}.k-lab-index-view .k-panel-main>.k-box{margin-bottom:var(--spacing-8)}.k-lab-index-view .k-list-items{grid-template-columns:repeat(auto-fill,minmax(12rem,1fr))}.k-lab-docs-deprecated .k-box{box-shadow:var(--shadow)}.k-lab-docs-examples .k-code+.k-code{margin-top:var(--spacing-4)}.k-lab-docs-prop-values{font-size:var(--text-xs);border-left:2px solid var(--color-blue-300);padding-inline-start:var(--spacing-2)}.k-lab-docs-prop-values dl{font-weight:var(--font-bold)}.k-lab-docs-prop-values dl+dl{margin-top:var(--spacing-2)}.k-lab-docs-prop-values dd{display:inline-flex;flex-wrap:wrap;gap:var(--spacing-1)}.k-lab-docs-desc-header{display:flex;justify-content:space-between;align-items:center}.k-table .k-lab-docs-deprecated{--box-height: var(--height-xs);--text-font-size: var(--text-xs)}.k-labs-docs-params li{list-style:square;margin-inline-start:var(--spacing-3)}.k-labs-docs-params .k-lab-docs-types{margin-inline:1ch}.k-lab-docs-types{display:inline-flex;flex-wrap:wrap;gap:var(--spacing-1)}.k-lab-docs-types.k-text code{color:var(--color-gray-800);outline-color:var(--color-gray-400);background:var(--color-gray-300)}.k-lab-docs-types code:is([data-type=boolean],[data-type=Boolean]){color:var(--color-purple-800);outline-color:var(--color-purple-400);background:var(--color-purple-300)}.k-lab-docs-types code:is([data-type=string],[data-type=String]){color:var(--color-green-800);outline-color:var(--color-green-500);background:var(--color-green-300)}.k-lab-docs-types code:is([data-type=number],[data-type=Number]){color:var(--color-orange-800);outline-color:var(--color-orange-500);background:var(--color-orange-300)}.k-lab-docs-types code:is([data-type=array],[data-type=Array]){color:var(--color-aqua-800);outline-color:var(--color-aqua-500);background:var(--color-aqua-300)}.k-lab-docs-types code:is([data-type=object],[data-type=Object]){color:var(--color-yellow-800);outline-color:var(--color-yellow-500);background:var(--color-yellow-300)}.k-lab-docs-types code[data-type=func]{color:var(--color-pink-800);outline-color:var(--color-pink-400);background:var(--color-pink-300)}.k-lab-docs-section+.k-lab-docs-section{margin-top:var(--spacing-12)}.k-lab-docs-section .k-headline{margin-bottom:var(--spacing-3)}.k-lab-docs-section .k-table td{padding:.375rem var(--table-cell-padding);vertical-align:top;line-height:1.5;word-break:break-word}.k-lab-docs-description :where(.k-text,.k-box)+:where(.k-text,.k-box){margin-top:var(--spacing-3)}.k-lab-docs-required{margin-inline-start:var(--spacing-1);font-size:.7rem;vertical-align:super;color:var(--color-red-600)}.k-lab-docs-since{margin-top:var(--spacing-1);font-size:var(--text-xs);color:var(--color-gray-600)}.k-lab-example{position:relative;container-type:inline-size;max-width:100%;outline-offset:-2px;border-radius:var(--rounded);border:1px solid var(--color-gray-300)}.k-lab-example+.k-lab-example{margin-top:var(--spacing-12)}.k-lab-example-header{display:flex;justify-content:space-between;align-items:center;height:var(--height-md);padding-block:var(--spacing-3);padding-inline:var(--spacing-2);border-bottom:1px solid var(--color-gray-300)}.k-lab-example-label{font-size:12px;color:var(--color-text-dimmed)}.k-lab-example-canvas,.k-lab-example-code{padding:var(--spacing-16)}.k-lab-example[data-flex] .k-lab-example-canvas{display:flex;align-items:center;gap:var(--spacing-6)}.k-lab-example-inspector{--icon-size: 13px;--button-color-icon: var(--color-gray-500)}.k-lab-example-inspector .k-button:not([data-theme]):hover{--button-color-icon: var(--color-gray-600)}.k-lab-example-inspector .k-button:where([data-theme]){--button-color-icon: var(--color-gray-800)}.k-lab-examples>:where(.k-text,.k-box){margin-bottom:var(--spacing-6)}.k-lab-form>footer{border-top:1px dashed var(--color-border);padding-top:var(--spacing-6)}.k-lab-playground-view[data-has-tabs=true] .k-header{margin-bottom:0}.k-lab-examples h2{margin-bottom:var(--spacing-6)}.k-lab-examples *+h2{margin-top:var(--spacing-12)}.k-lab-input-examples .k-lab-example:has(:invalid){outline:2px solid var(--color-red-500);outline-offset:-2px}.k-lab-input-examples-focus .k-lab-example-canvas>.k-button{margin-top:var(--spacing-6)}.k-lab-helpers-examples .k-lab-example .k-text{margin-bottom:var(--spacing-6)}.k-lab-helpers-examples h2{margin-bottom:var(--spacing-3);font-weight:var(--font-bold)}.token.punctuation,.token.comment,.token.doctype{color:var(--color-gray-500)}.token.tag,.token.markup,.token.variable,.token.this,.token.selector,.token.key,.token.kirbytag-bracket,.token.prolog,.token.delimiter{color:var(--color-red-500)}.token.constant,.token.number,.token.boolean,.token.boolean.important,.token.attr-name,.token.kirbytag-attr,.token.kirbytag-name,.token.entity,.token.bold,.token.bold>.punctuation{color:var(--color-orange-500)}.token.keyword,.token.italic,.token.italic>.punctuation{color:var(--color-purple-500)}.token.function{color:var(--color-blue-500)}.token.operator,.token.title{color:var(--color-aqua-500)}.token.string,.token.attr-value,.token.attr-value .punctuation,.token.list.punctuation{color:var(--color-green-500)}.token.scope,.token.class-name,.token.property,.token.url{color:var(--color-yellow-500)}.token.title,.token.kirbytag-bracket,.token.list.punctuation,.token.bold{font-weight:var(--font-bold)}.token.title .punctuation{color:var(--color-gray-500)}.token.italic{font-style:italic} +.k-items{position:relative;display:grid;container-type:inline-size}.k-items[data-layout=list]{gap:2px}.k-items[data-layout=cardlets]{--items-size: 1fr;display:grid;gap:.75rem;grid-template-columns:repeat(auto-fill,minmax(var(--items-size),1fr))}@container (min-width: 15rem){.k-items[data-layout=cardlets]{--items-size: 15rem}}.k-items[data-layout=cards]{display:grid;gap:1.5rem;grid-template-columns:1fr}@container (min-width: 6rem){.k-items[data-layout=cards][data-size=tiny]{grid-template-columns:repeat(auto-fill,minmax(6rem,1fr))}}@container (min-width: 9rem){.k-items[data-layout=cards][data-size=small]{grid-template-columns:repeat(auto-fill,minmax(9rem,1fr))}}@container (min-width: 12rem){.k-items[data-layout=cards][data-size=auto],.k-items[data-layout=cards][data-size=medium]{grid-template-columns:repeat(auto-fill,minmax(12rem,1fr))}}@container (min-width: 15rem){.k-items[data-layout=cards][data-size=large]{grid-template-columns:repeat(auto-fill,minmax(15rem,1fr))}}@container (min-width: 18rem){.k-items[data-layout=cards][data-size=huge]{grid-template-columns:repeat(auto-fill,minmax(18rem,1fr))}}.k-collection-footer{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:nowrap;gap:var(--spacing-12);margin-top:var(--spacing-2)}.k-empty{max-width:100%}:root{--item-button-height: var(--height-md);--item-button-width: var(--height-md);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--item-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--item-height: auto;--item-height-cardlet: calc(var(--height-md) * 3);--item-shadow: var(--shadow-sm)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--item-color-back: var(--csstools-light-dark-toggle--0, var(--color-white))}}@supports (color: light-dark(red,red)){:root{--item-color-back: light-dark(var(--color-white), var(--color-gray-850))}}.k-item{position:relative;background:var(--item-color-back);box-shadow:var(--item-shadow);border-radius:var(--rounded);min-height:var(--item-height);container-type:inline-size}.k-item:has(a:focus){outline:2px solid var(--color-focus)}.k-item .k-icon-frame{--back: var(--color-gray-300)}.k-item-content{line-height:1.25;overflow:hidden;padding:var(--spacing-2)}.k-item-content a:focus{outline:0}.k-item-content a:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.k-item-info{color:var(--color-text-dimmed)}.k-item-options{transform:translate(0);z-index:1;display:flex;align-items:center;justify-content:space-between}.k-item-options:has(>:first-child:last-child){justify-content:flex-end}.k-item-options .k-button{--button-height: var(--item-button-height);--button-width: var(--item-button-width)}.k-item .k-sort-button{position:absolute;z-index:2}.k-item:not(:hover):not(.k-sortable-fallback) .k-sort-button{opacity:0}.k-item[data-layout=list]{--item-height: var( --field-input-height );--item-button-height: var(--item-height);--item-button-width: auto;display:grid;align-items:center;grid-template-columns:1fr auto}.k-item[data-layout=list][data-has-image=true]{grid-template-columns:var(--item-height) 1fr auto}.k-item[data-layout=list] .k-frame{--ratio: 1/1;border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded);height:100%}.k-item[data-layout=list] .k-item-content{display:flex;min-width:0;flex-wrap:wrap;column-gap:var(--spacing-4);justify-content:space-between}.k-item[data-layout=list] .k-item-title,.k-item[data-layout=list] .k-item-info{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@container (max-width: 25rem){.k-item[data-layout=list] .k-item-content:has(.k-item-info){flex-direction:column}}.k-item[data-layout=list] .k-sort-button{--button-width: calc(1.5rem + var(--spacing-1));--button-height: var(--item-height);left:calc(-1 * var(--button-width))}.k-item:is([data-layout=cardlets],[data-layout=cards]) .k-sort-button{top:var(--spacing-2);inset-inline-start:var(--spacing-2);--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-white);color:var(--csstools-light-dark-toggle--1, var(--color-black));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) 7%;background:hsla(0,0%,var(--csstools-light-dark-toggle--2, 100%),50%);background:hsla(0,0%,light-dark(100%,7%),50%);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);box-shadow:0 2px 5px #0003;--button-width: 1.5rem;--button-height: 1.5rem;--button-rounded: var(--rounded-sm);--button-padding: 0;--icon-size: 14px}@supports (color: light-dark(red,red)){.k-item:is([data-layout=cardlets],[data-layout=cards]) .k-sort-button{color:light-dark(var(--color-black),var(--color-white))}}.k-item:is([data-layout=cardlets],[data-layout=cards]) .k-sort-button:hover{--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) 7%;background:hsla(0,0%,var(--csstools-light-dark-toggle--3, 100%),95%);background:hsla(0,0%,light-dark(100%,7%),95%)}.k-item[data-layout=cardlets]{--item-height: var(--item-height-cardlet);display:grid;grid-template-areas:"content" "options";grid-template-columns:1fr;grid-template-rows:1fr var(--height-md)}.k-item[data-layout=cardlets][data-has-image=true]{grid-template-areas:"image content" "image options";grid-template-columns:minmax(0,var(--item-height)) 1fr}.k-item[data-layout=cardlets] .k-frame{grid-area:image;border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded);aspect-ratio:auto}.k-item[data-layout=cardlets] .k-item-content{grid-area:content}.k-item[data-layout=cardlets] .k-item-info{margin-top:.125em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.k-item[data-layout=cardlets] .k-item-options{grid-area:options}.k-item[data-layout=cards]{display:flex;flex-direction:column}.k-item[data-layout=cards] .k-frame{border-start-start-radius:var(--rounded);border-start-end-radius:var(--rounded)}.k-item[data-layout=cards] .k-item-content{flex-grow:1;padding:var(--spacing-2)}.k-item[data-layout=cards] .k-item-info{margin-top:.125em}.k-item[data-theme=disabled]{background:transparent;box-shadow:none;outline:1px solid var(--color-border);outline-offset:-1px}.k-item[data-selecting=true][data-selectable=true]{cursor:pointer}.k-item-options-checkbox{display:inline-flex;align-items:center;justify-content:center;height:var(--item-button-height);width:var(--item-button-height);flex-shrink:0}.k-item[data-selectable=true]:has(.k-item-options-checkbox input:checked){--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-blue-800);--item-color-back: var(--csstools-light-dark-toggle--4, var(--color-blue-250));--item-shadow: 0 1px 3px 0 rgba(0 0 0 / .25), 0 1px 2px 0 rgba(0 0 0 / .05)}@supports not (color: light-dark(tan,tan)){.k-item[data-selectable=true]:has(.k-item-options-checkbox input:checked) *{--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-blue-800);--item-color-back: var(--csstools-light-dark-toggle--4, var(--color-blue-250))}}@supports (color: light-dark(red,red)){.k-item[data-selectable=true]:has(.k-item-options-checkbox input:checked){--item-color-back: light-dark(var(--color-blue-250), var(--color-blue-800))}}.k-dialog-body{padding:var(--dialog-padding)}.k-dialog:has(.k-dialog-footer) .k-dialog-body{padding-bottom:0}.k-button-group.k-dialog-buttons{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-3);--button-height: var(--height-lg)}.k-dialog-fields{padding-bottom:.5rem;container-type:inline-size}.k-dialog-footer{padding:var(--dialog-padding);line-height:1;flex-shrink:0}.k-dialog .k-notification{padding-block:.325rem;border-start-start-radius:var(--dialog-rounded);border-start-end-radius:var(--dialog-rounded);margin-top:-1px}.k-dialog-search{margin-bottom:.75rem;--input-color-border: transparent;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--input-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300))}@supports not (color: light-dark(tan,tan)){.k-dialog-search *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--input-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300))}}@supports (color: light-dark(red,red)){.k-dialog-search{--input-color-back: light-dark(var(--color-gray-300), var(--color-gray-950))}}:root{--dialog-color-back: var(--panel-color-back);--dialog-color-text: currentColor;--dialog-margin: var(--spacing-6);--dialog-padding: var(--spacing-6);--dialog-rounded: var(--rounded-xl);--dialog-shadow: var(--shadow-xl);--dialog-width: 22rem}.k-dialog-portal{padding:var(--dialog-margin)}.k-dialog{position:relative;background:var(--dialog-color-back);color:var(--dialog-color-text);width:clamp(10rem,100%,var(--dialog-width));box-shadow:var(--dialog-shadow);border-radius:var(--dialog-rounded);line-height:1;display:flex;flex-direction:column;overflow:clip;container-type:inline-size}@media screen and (min-width: 20rem){.k-dialog[data-size=small]{--dialog-width: 20rem}}@media screen and (min-width: 22rem){.k-dialog[data-size=default]{--dialog-width: 22rem}}@media screen and (min-width: 30rem){.k-dialog[data-size=medium]{--dialog-width: 30rem}}@media screen and (min-width: 40rem){.k-dialog[data-size=large]{--dialog-width: 40rem}}@media screen and (min-width: 60rem){.k-dialog[data-size=huge]{--dialog-width: 60rem}}.k-dialog .k-pagination{margin-bottom:-1.5rem;display:flex;justify-content:center;align-items:center}.k-changes-dialog section+section{margin-top:var(--spacing-6)}.k-changes-dialog .k-headline{margin-top:-.5rem;margin-bottom:var(--spacing-3)}.k-error-details{background:var(--input-color-back);display:block;overflow:auto;padding:1rem;border-radius:var(--rounded);font-size:var(--text-sm);line-height:1.25em;margin-top:.75rem}.k-error-details dt{color:var(--color-red-500);margin-bottom:.25rem}.k-error-details dd{overflow:hidden;overflow-wrap:break-word;text-overflow:ellipsis}.k-error-details dd:not(:last-of-type){margin-bottom:1.5em}.k-error-details li{white-space:pre-line}.k-error-details li:not(:last-child){border-bottom:1px solid var(--color-border);padding-bottom:.25rem;margin-bottom:.25rem}.k-models-dialog .k-list-item{cursor:pointer}.k-models-dialog .k-choice-input{--choice-color-checked: var(--color-focus);display:flex;align-items:center;height:var(--item-button-height);margin-inline-end:var(--spacing-3)}.k-models-dialog .k-choice-input input{top:0}.k-models-dialog .k-collection-footer .k-pagination{margin-bottom:0}.k-license-dialog-status{display:flex;align-items:center;gap:var(--spacing-2)}.k-license-dialog .k-icon{color:var(--theme-color-700)}.k-lock-alert-dialog dl{margin:var(--spacing-6) 0 var(--spacing-2) 0}.k-lock-alert-dialog dl div{padding:var(--spacing-1) 0;line-height:var(--leading-normal);display:flex;align-items:center;gap:.75rem;color:var(--color-gray-500)}.k-lock-alert-dialog .k-dialog-buttons{grid-template-columns:1fr}.k-page-template-switch{margin-bottom:var(--spacing-6);padding-bottom:var(--spacing-6);border-bottom:1px dashed var(--color-gray-300)}.k-page-move-dialog .k-headline{margin-bottom:var(--spacing-2)}.k-page-move-parent{--tree-color-back: var(--input-color-back);--tree-branch-color-back: var(--input-color-back);--tree-branch-hover-color-back: var(--panel-color-back);padding:var(--spacing-3);background:var(--tree-color-back);border-radius:var(--rounded);box-shadow:var(--shadow)}.k-pages-dialog-navbar{display:flex;align-items:center;justify-content:center;margin-bottom:.5rem;padding-inline-end:38px}.k-pages-dialog-navbar .k-button[aria-disabled=true]{opacity:0}.k-pages-dialog-navbar .k-headline{flex-grow:1;text-align:center}.k-pages-dialog-option[aria-disabled=true]{opacity:.25}.k-search-dialog{--dialog-padding: 0;--dialog-rounded: var(--rounded);overflow:visible}.k-overlay[open][data-type=dialog]>.k-portal>.k-search-dialog{margin-top:0}.k-totp-dialog-headline{margin-bottom:var(--spacing-1)}.k-totp-dialog-intro{margin-bottom:var(--spacing-6)}.k-totp-dialog-grid{display:grid;gap:var(--spacing-6)}@media screen and (min-width: 40rem){.k-totp-dialog-grid{grid-template-columns:1fr 1fr;gap:var(--spacing-8)}}.k-totp-qrcode .k-box[data-theme]{padding:var(--box-padding-inline)}.k-totp-dialog-fields .k-field-name-confirm{--input-height: var(--height-xl);--input-rounded: var(--rounded);--input-font-size: var(--text-3xl)}.k-upload-dialog.k-dialog{--dialog-width: 40rem}.k-upload-replace-dialog .k-upload-items{display:flex;gap:var(--spacing-3);align-items:center}.k-upload-original{width:6rem;border-radius:var(--rounded);box-shadow:var(--shadow);overflow:hidden}.k-upload-replace-dialog .k-upload-item{flex-grow:1}.k-drawer-body{padding:var(--drawer-body-padding);flex-grow:1;background:var(--drawer-color-back)}.k-drawer-body .k-writer-input:focus-within .k-toolbar:not([data-inline=true]),.k-drawer-body .k-textarea-input-wrapper:focus-within .k-toolbar,.k-drawer-body .k-table th{top:-1.5rem}.k-drawer-header{--button-height: calc(var(--drawer-header-height) - var(--spacing-1));flex-shrink:0;height:var(--drawer-header-height);padding-inline-start:var(--drawer-header-padding);display:flex;align-items:center;line-height:1;justify-content:space-between;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);background:var(--csstools-light-dark-toggle--0, var(--color-white));font-size:var(--text-sm)}@supports (color: light-dark(red,red)){.k-drawer-header{background:light-dark(var(--color-white),var(--color-gray-850))}}.k-drawer-breadcrumb{flex-grow:1}.k-drawer-options{display:flex;align-items:center;padding-inline-end:.75rem}.k-drawer-option{--button-width: var(--button-height)}.k-drawer-option[aria-disabled=true]{opacity:var(--opacity-disabled)}.k-notification.k-drawer-notification{padding:.625rem 1.5rem}.k-drawer-tabs.k-tabs{flex-grow:1;gap:0;margin:0;justify-content:end}.k-drawer-tabs .k-tabs-button{--button-height: calc(var(--drawer-header-height) - var(--spacing-1));--button-padding: var(--spacing-3);display:flex;align-items:center;font-size:var(--text-xs);margin-block:0}.k-drawer-tabs .k-tabs-button[aria-current=true]:after{z-index:1}:root{--drawer-body-padding: 1.5rem;--drawer-color-back: var(--panel-color-back);--drawer-header-height: 2.5rem;--drawer-header-padding: 1rem;--drawer-shadow: var(--shadow-xl);--drawer-width: 50rem}.k-drawer-overlay+.k-drawer-overlay{--overlay-color-back: none}.k-drawer{--header-sticky-offset: calc(var(--drawer-body-padding) * -1);z-index:var(--z-toolbar);flex-basis:var(--drawer-width);position:relative;display:flex;flex-direction:column;background:var(--drawer-color-back);box-shadow:var(--drawer-shadow);container-type:inline-size}.k-drawer[aria-disabled=true]{display:none;pointer-events:none}:root{--dropdown-color-bg: var(--color-gray-950);--dropdown-color-current: var(--color-blue-500);--dropdown-color-hr: var(--color-gray-850);--dropdown-color-text: var(--color-white);--dropdown-padding: var(--spacing-2);--dropdown-rounded: var(--rounded);--dropdown-shadow: var(--shadow-xl)}.k-dropdown-content{--dropdown-x: 0;--dropdown-y: 0;position:absolute;inset-block-start:0;inset-inline-start:initial;left:0;width:max-content;padding:var(--dropdown-padding);background:var(--dropdown-color-bg);border-radius:var(--dropdown-rounded);color:var(--dropdown-color-text);box-shadow:var(--dropdown-shadow);text-align:start;transform:translate(var(--dropdown-x),var(--dropdown-y))}.k-dropdown-content::backdrop{background:none}.k-dropdown-content[data-align-x=end]{--dropdown-x: -100%}.k-dropdown-content[data-align-x=center]{--dropdown-x: -50%}.k-dropdown-content[data-align-y=top]{--dropdown-y: -100%}.k-dropdown-content hr{margin:.5rem 0;height:1px;background:var(--dropdown-color-hr)}.k-dropdown-content[data-theme=light]{--dropdown-color-bg: var(--color-white);--dropdown-color-current: var(--color-blue-800);--dropdown-color-hr: var(--color-gray-250);--dropdown-color-text: var(--color-black)}.k-dropdown-item.k-button{--button-align: flex-start;--button-color-text: var(--dropdown-color-text);--button-height: var(--height-sm);--button-rounded: var(--rounded-sm);--button-width: 100%;display:flex}.k-dropdown-item.k-button:focus{outline:var(--outline)}.k-dropdown-item.k-button[aria-current=true]{--button-color-text: var(--dropdown-color-current)}.k-dropdown-item.k-button[aria-current=true]:after{margin-inline-start:auto;text-align:center;content:"✓";padding-inline-start:var(--spacing-1)}.k-dropdown-item.k-button:not([aria-disabled=true]):hover{--button-color-back: var(--dropdown-color-hr)}.k-options-dropdown{display:flex;justify-content:center;align-items:center}:root{--picklist-rounded: var(--rounded-sm);--picklist-highlight: var(--color-yellow-500)}.k-picklist-input{--choice-color-text: currentColor;--button-rounded: var(--picklist-rounded)}.k-picklist-input-header{--input-rounded: var(--picklist-rounded)}.k-picklist-input-search{display:flex;align-items:center;border-radius:var(--picklist-rounded)}.k-picklist-input-search .k-search-input{height:var(--button-height)}.k-picklist-input-search:focus-within{outline:var(--outline)}.k-picklist-dropdown .k-picklist-input-create:focus{outline:0}.k-picklist-dropdown .k-picklist-input-create[aria-disabled=true]{visibility:hidden}.k-picklist-input-options.k-grid{--columns: 1}.k-picklist-input-options li+li{margin-top:var(--spacing-1)}.k-picklist-input-options .k-choice-input{padding-inline:var(--spacing-2)}.k-picklist-input-options .k-choice-input{--choice-color-checked: var(--color-focus)}.k-picklist-input-options .k-choice-input:has(:checked){--choice-color-text: var(--color-focus)}.k-picklist-input-options .k-choice-input[aria-disabled=true]{--choice-color-text: var(--color-text-dimmed)}.k-picklist-input-options .k-choice-input:has(:focus-within){outline:var(--outline)}.k-picklist-input-options .k-choice-input b{font-weight:var(--font-normal);color:var(--picklist-highlight)}.k-picklist-input-more.k-button{--button-width: 100%;--button-align: start;--button-color-text: var(--color-text-dimmed);padding-inline:var(--spacing-2)}.k-picklist-input-more.k-button .k-button-icon{position:relative;inset-inline-start:-1px}.k-picklist-input-empty{height:var(--button-height);line-height:1.25rem;padding:var(--spacing-1) var(--spacing-2);color:var(--color-text-dimmed)}.k-picklist-dropdown{--color-text-dimmed: var(--color-gray-400);padding:0;max-width:30rem;min-width:8rem}.k-picklist-dropdown :where(.k-picklist-input-header,.k-picklist-input-body,.k-picklist-input-footer){padding:var(--dropdown-padding)}.k-picklist-dropdown .k-picklist-input-header{border-bottom:1px solid var(--dropdown-color-hr)}.k-picklist-dropdown .k-picklist-input-search{background:var(--dropdown-color-hr);padding-inline-end:var(--input-padding)}.k-picklist-dropdown .k-picklist-input-create{--button-rounded: 1rem;--button-height: 1.125rem}.k-picklist-dropdown .k-picklist-input-create:focus{--button-color-back: var(--color-blue-500);--button-color-text: var(--color-black)}.k-picklist-dropdown .k-picklist-input-body{max-height:calc(var(--button-height) * 9.5 + 2px * 9 + var(--dropdown-padding));overflow-y:auto;outline-offset:-2px;overscroll-behavior:contain;scroll-padding-top:var(--dropdown-padding);scroll-padding-bottom:var(--dropdown-padding)}.k-picklist-dropdown .k-picklist-input-options .k-choice-input{--choice-color-border: var(--dropdown-color-hr);--choice-color-back: var(--dropdown-color-hr);--choice-color-info: var(--color-text-dimmed);min-height:var(--button-height);border-radius:var(--picklist-rounded);padding-block:.375rem}.k-picklist-dropdown .k-picklist-input-options li+li{margin-top:0}.k-picklist-dropdown .k-picklist-input-options .k-choice-input[aria-disabled=true] input{--choice-color-border: var(--dropdown-color-hr);--choice-color-back: var(--dropdown-color-hr);--choice-color-checked: var(--dropdown-color-hr);opacity:var(--opacity-disabled)}.k-picklist-dropdown .k-picklist-input-options .k-choice-input:not([aria-disabled=true]):hover{background-color:var(--dropdown-color-hr)}.k-picklist-dropdown .k-picklist-input-options .k-choice-input:not([aria-disabled=true]):focus-within{--choice-color-text: var(--color-blue-500)}.k-picklist-dropdown .k-picklist-input-more.k-button:hover{--button-color-back: var(--dropdown-color-hr)}.k-picklist-dropdown .k-picklist-input-body+.k-picklist-input-footer{border-top:1px solid var(--dropdown-color-hr)}.k-counter{font-size:var(--text-xs);color:var(--color-text)}.k-counter[data-theme]{color:var(--theme-color-text)}.k-counter-rules{color:var(--color-text-dimmed);padding-inline-start:.5rem}.k-field[data-disabled=true]{cursor:not-allowed}.k-field[data-disabled=true] *{pointer-events:none}.k-field[data-disabled=true] .k-text[data-theme=help] *{pointer-events:initial}.k-field-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-6);position:relative;margin-bottom:var(--spacing-2)}.k-field-options{flex-shrink:0}.k-field:focus-within>.k-field-header>.k-field-counter{display:block}.k-field-footer{margin-top:var(--spacing-2)}.k-fieldset{border:0}.k-form-submitter{display:none}.k-form-controls-dropdown{max-width:15rem}.k-form-controls-dropdown p{line-height:var(--leading-normal);padding:var(--spacing-1) var(--spacing-2)}.k-form-controls-dropdown dl div{padding:var(--spacing-1) var(--spacing-2);line-height:var(--leading-normal);display:flex;align-items:center;gap:.75rem;color:var(--color-gray-500)}:root{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--input-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--input-color-border: var(--color-border);--input-color-description: var(--color-text-dimmed);--input-color-icon: currentColor;--input-color-placeholder: var(--color-gray-600);--input-color-text: currentColor;--input-font-family: var(--font-sans);--input-font-size: var(--text-sm);--input-height: 2.25rem;--input-leading: 1;--input-outline-focus: var(--outline);--input-padding: var(--spacing-2);--input-padding-multiline: .475rem var(--input-padding);--input-rounded: var(--rounded);--input-shadow: none}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--input-color-back: var(--csstools-light-dark-toggle--0, var(--color-white))}}@supports (color: light-dark(red,red)){:root{--input-color-back: light-dark(var(--color-white), var(--color-gray-850))}}@media (pointer: coarse){:root{--input-font-size: var(--text-md);--input-padding-multiline: .375rem var(--input-padding)}}.k-input{display:flex;align-items:center;line-height:var(--input-leading);border:0;background:var(--input-color-back);border-radius:var(--input-rounded);outline:1px solid var(--input-color-border);color:var(--input-color-text);min-height:var(--input-height);box-shadow:var(--input-shadow);font-family:var(--input-font-family);font-size:var(--input-font-size)}.k-input:focus-within{outline:var(--input-outline-focus)}.k-input-element{flex-grow:1;min-width:0}.k-input-icon{color:var(--input-color-icon);display:flex;justify-content:center;align-items:center;width:var(--input-height)}.k-input-icon-button{width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.k-input-description{color:var(--input-color-description);padding-inline:var(--input-padding)}.k-input-before{padding-inline-end:0}.k-input-after{padding-inline-start:0}.k-input :where(.k-input-description,.k-input-icon){align-self:stretch;display:flex;align-items:center;flex-shrink:0}.k-input[data-disabled=true]{--input-color-back: var(--panel-color-back);--input-color-icon: var(--color-gray-600);pointer-events:none}.k-block-title{display:flex;align-items:top;min-width:0;padding-inline-end:.75rem;gap:var(--spacing-2);flex-shrink:1}.k-block-title-text{display:flex;flex-shrink:1;flex-wrap:wrap;min-width:0;gap:var(--spacing-2)}.k-block-name,.k-block-label{line-height:1.25;overflow:hidden;min-width:0;white-space:wrap;text-overflow:ellipsis}.k-block-label{color:var(--color-text-dimmed)}.k-block-icon{--icon-color: var(--color-gray-600);width:1rem}.k-block-type-default .k-block-title{line-height:1.5em}.k-block-options{--toolbar-size: 30px;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-900);border:1px solid var(--csstools-light-dark-toggle--0, var(--color-border));box-shadow:var(--shadow-xl)}@supports (color: light-dark(red,red)){.k-block-options{border:1px solid light-dark(var(--color-border),var(--color-gray-900))}}.k-block-options>.k-button:not(:last-of-type){border-inline-end:1px solid var(--toolbar-border)}.k-block-options .k-dropdown-content{margin-top:.5rem}.k-block-container{position:relative;padding:var(--spacing-3);background:var(--block-color-back);border-radius:var(--rounded)}.k-block-container:not(:last-of-type){border-bottom:1px dashed var(--panel-color-back)}.k-block-container:focus{outline:0}.k-block-container[data-selected=true]{z-index:2;outline:var(--outline);border-bottom-color:transparent}.k-block-container[data-batched=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:#b1c2d82d;mix-blend-mode:multiply}.k-block-container .k-block-options{display:none;position:absolute;top:0;inset-inline-end:var(--spacing-3);margin-top:calc(-1.75rem + 2px)}.k-block-container[data-last-selected=true]>.k-block-options{display:flex}.k-block-container[data-hidden=true] .k-block{opacity:.25}.k-drawer-options .k-drawer-option[data-disabled=true]{vertical-align:middle;display:inline-grid}.k-block-container[data-disabled=true]{background:var(--panel-color-back)}.k-block-container:is(.k-sortable-ghost,.k-sortable-fallback) .k-block{position:relative;max-height:4rem;overflow:hidden}.k-block-container:is(.k-sortable-ghost,.k-sortable-fallback) .k-block:after{position:absolute;bottom:0;content:"";height:2rem;width:100%;background:linear-gradient(to top,var(--block-color-back),transparent)}:root{--block-color-back: var(--item-color-back)}.k-blocks{border-radius:var(--rounded)}.k-blocks:not(:has(>.k-blocks-list:empty),[data-disabled=true]){background:var(--block-color-back);box-shadow:var(--shadow)}.k-blocks[data-disabled=true]:not([data-empty=true]){border:1px solid var(--input-color-border)}.k-blocks-list[data-multi-select-key=true]>.k-block-container *{pointer-events:none}.k-blocks-list[data-multi-select-key=true]>.k-block-container .k-blocks *{pointer-events:all}.k-blocks .k-sortable-ghost{outline:2px solid var(--color-focus);box-shadow:#11111140 0 5px 10px;cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.k-blocks>.k-blocks-empty{display:flex;align-items:center}.k-blocks>.k-blocks-list:not(:empty)+.k-blocks-empty{display:none}.k-block-importer .k-dialog-body{padding:0}.k-block-importer label{display:block;padding:var(--spacing-6) var(--spacing-6) 0;color:var(--color-text-dimmed);line-height:var(--leading-normal)}.k-block-importer label small{display:block;font-size:inherit}.k-block-importer textarea{width:100%;height:20rem;background:none;font:inherit;color:var(--color-white);border:0;padding:var(--spacing-6);resize:none}.k-block-importer textarea:focus{outline:0}.k-block-selector .k-headline{margin-bottom:1rem}.k-block-selector details+details{margin-top:var(--spacing-6)}.k-block-selector summary{font-size:var(--text-xs);cursor:pointer;color:var(--color-text-dimmed)}.k-block-selector details:only-of-type summary{pointer-events:none}.k-block-selector summary:focus{outline:0}.k-block-selector summary:focus-visible{color:var(--color-focus)}.k-block-types{display:grid;grid-gap:2px;margin-top:.75rem;grid-template-columns:repeat(1,1fr)}.k-block-types .k-button{--button-color-icon: var(--color-text);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--button-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--button-padding: var(--spacing-3);width:100%;justify-content:start;gap:1rem;box-shadow:var(--shadow)}@supports not (color: light-dark(tan,tan)){.k-block-types .k-button *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--button-color-back: var(--csstools-light-dark-toggle--0, var(--color-white))}}@supports (color: light-dark(red,red)){.k-block-types .k-button{--button-color-back: light-dark(var(--color-white), var(--color-gray-850))}}.k-block-types .k-button[aria-disabled=true]{opacity:var(--opacity-disabled);--button-color-back: var(--color-gray-200);box-shadow:none}.k-clipboard-hint{padding-top:1.5rem;line-height:var(--leading-normal);font-size:var(--text-xs);color:var(--color-text-dimmed)}.k-clipboard-hint small{display:block;font-size:inherit;color:var(--color-text-dimmed)}.k-block-background-dropdown>.k-button{--color-frame-rounded: 0;--color-frame-size: 1.5rem;--button-height: 1.5rem;--button-padding: 0 .125rem;--button-color-back: var(--block-color-back);gap:.25rem;box-shadow:var(--shadow-toolbar);border:1px solid var(--button-color-back);overflow:clip}.k-block-background-dropdown .k-color-frame{border-right:1px solid var(--color-border)}.k-block-background-dropdown .k-color-frame:after{box-shadow:none}.k-block .k-block-background-dropdown{position:absolute;inset-inline-end:var(--spacing-3);bottom:var(--spacing-3);opacity:0;transition:opacity .2s ease-in-out}.k-block:hover .k-block-background-dropdown{opacity:1}.k-block-figure:not([data-empty=true]){--block-figure-back: var(--block-color-back);background:var(--block-figure-back)}.k-block-figure-container:not([data-disabled=true]){cursor:pointer}.k-block-figure iframe{border:0;pointer-events:none;background:var(--color-black)}.k-block-figure figcaption{padding-top:.5rem;color:var(--color-text-dimmed);font-size:var(--text-sm);text-align:center}.k-block-figure-empty{--button-width: 100%;--button-height: 6rem;--button-color-text: var(--color-text-dimmed);--button-color-back: var(--panel-color-back)}.k-block-figure-empty,.k-block-figure-container>*{border-radius:var(--rounded-sm)}.k-block-figure-caption{display:flex;justify-content:center;padding-top:var(--spacing-3)}.k-block-figure-caption .k-writer{width:max-content;text-align:center}.k-block-figure-caption .k-writer .k-text{color:var(--color-gray-600);font-size:var(--text-sm);mix-blend-mode:exclusion}.k-block-type-code-editor{position:relative}.k-block-type-code-editor .k-input{--input-color-border: none;--input-color-back: var(--color-black);--input-color-text: var(--color-white);--input-font-family: var(--font-mono);--input-outline-focus: none;--input-padding: var(--spacing-3);--input-padding-multiline: var(--input-padding)}.k-block-type-code-editor .k-input[data-type=textarea]{white-space:pre-wrap}.k-block-type-code-editor-language{--input-font-size: var(--text-xs);position:absolute;inset-inline-end:0;bottom:0}.k-block-type-code-editor-language .k-input-element{padding-inline-start:1.5rem}.k-block-type-code-editor-language .k-input-icon{inset-inline-start:0}.k-block-container.k-block-container-type-fields{padding-block:0}.k-block-container:not([data-hidden=true]) .k-block-type-fields>:not([data-collapsed=true]){padding-bottom:var(--spacing-3)}.k-block-type-fields-header{display:flex;flex-wrap:wrap;justify-content:space-between}.k-block-type-fields-header .k-block-title{padding-block:var(--spacing-3);cursor:pointer;white-space:nowrap}.k-block-type-fields-form{background-color:var(--panel-color-back);padding:var(--spacing-6) var(--spacing-6) var(--spacing-8);border-radius:var(--rounded-sm);container:column / inline-size}.k-block-container-type-fields[data-hidden=true] :where(.k-drawer-tabs,.k-block-type-fields-form){display:none}.k-block-type-fields-header .k-drawer-tabs.k-tabs .k-tabs-button{bottom:-2px}.k-block-container.k-block-container-type-gallery{padding:0}.k-block-type-gallery-figure{padding:var(--spacing-3);border-radius:var(--rounded)}.k-block-type-gallery-figure:not([data-empty=true]){background:var(--block-back)}.k-block-type-gallery-figure ul{display:grid;grid-gap:.75rem;grid-template-columns:repeat(auto-fit,minmax(6rem,1fr));line-height:0;align-items:center;justify-content:center}.k-block-type-gallery:not([data-disabled=true]) .k-block-type-gallery-figure ul{cursor:pointer}.k-block-type-gallery-frame{border-radius:var(--rounded-sm)}.k-block-type-gallery[data-disabled=true] .k-block-type-gallery-placeholder{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);background:var(--csstools-light-dark-toggle--0, var(--color-gray-250))}@supports (color: light-dark(red,red)){.k-block-type-gallery[data-disabled=true] .k-block-type-gallery-placeholder{background:light-dark(var(--color-gray-250),var(--color-gray-950))}}.k-block-type-gallery-placeholder{background:var(--panel-color-back)}.k-block-type-heading-input{display:flex;align-items:center;line-height:1.25em;font-size:var(--text-size);font-weight:var(--font-bold)}.k-block-type-heading-input[data-level=h1]{--text-size: var(--text-3xl);line-height:1.125em}.k-block-type-heading-input[data-level=h2]{--text-size: var(--text-2xl)}.k-block-type-heading-input[data-level=h3]{--text-size: var(--text-xl)}.k-block-type-heading-input[data-level=h4]{--text-size: var(--text-lg)}.k-block-type-heading-input[data-level=h5]{--text-size: var(--text-md);line-height:1.5em}.k-block-type-heading-input[data-level=h6]{--text-size: var(--text-sm);line-height:1.5em}.k-block-type-heading-input .k-writer-input .ProseMirror strong{font-weight:700}.k-block-type-heading-level{--input-color-back: transparent;--input-color-border: none;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-500);--input-color-text: var(--csstools-light-dark-toggle--0, var(--color-gray-600));font-weight:var(--font-bold);text-transform:uppercase}@supports not (color: light-dark(tan,tan)){.k-block-type-heading-level *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-500);--input-color-text: var(--csstools-light-dark-toggle--0, var(--color-gray-600))}}@supports (color: light-dark(red,red)){.k-block-type-heading-level{--input-color-text: light-dark(var(--color-gray-600), var(--color-gray-500))}}.k-block-container.k-block-container-type-image{padding:0}.k-block-type-image .k-block-figure{padding:var(--spacing-3);border-radius:var(--rounded)}.k-block-type-image .k-block-figure-container{text-align:center;line-height:0}.k-block-type-image .k-block-figure[data-empty=true]{padding:var(--spacing-3)}.k-block-type-image-auto{max-width:100%;max-height:30rem;margin-inline:auto}.k-block-type-image .k-background-dropdown{position:absolute;inset-inline-end:var(--spacing-3);bottom:var(--spacing-3);opacity:0;transition:opacity .2s ease-in-out}.k-block-type-image:hover .k-background-dropdown{opacity:1}.k-block-type-line hr{margin-block:.75rem;border:0;border-top:1px solid var(--color-border)}.k-block-type-list-input{--input-color-back: transparent;--input-color-border: none;--input-outline-focus: none}.k-block-type-markdown-input{--input-color-back: var(--panel-color-back);--input-color-border: none;--input-outline-focus: none;--input-padding-multiline: var(--spacing-3)}.k-block-type-quote-editor{padding-inline-start:var(--spacing-3);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-border);border-inline-start:2px solid var(--csstools-light-dark-toggle--0, var(--color-black))}@supports (color: light-dark(red,red)){.k-block-type-quote-editor{border-inline-start:2px solid light-dark(var(--color-black),var(--color-border))}}.k-block-type-quote-text{font-size:var(--text-xl);margin-bottom:var(--spacing-1);line-height:1.25em}.k-block-type-quote-citation{font-style:italic;color:var(--color-text-dimmed)}.k-block-type-table-preview{cursor:pointer;border:1px solid var(--color-border);border-spacing:0;border-radius:var(--rounded-sm)}.k-block-type-table-preview :where(th,td){text-align:start;line-height:1.5em;font-size:var(--text-sm)}.k-block-type-table-preview th{padding:.5rem .75rem}.k-block-type-table-preview td:not(.k-table-index-column){padding:0 .75rem}.k-block-type-table-preview td>*,.k-block-type-table-preview td [class$=-field-preview]{padding:0}.k-block-type-text-input{line-height:1.5;height:100%}.k-block-container.k-block-container-type-text{padding:0}.k-block-type-text-input.k-writer-input[data-toolbar-inline=true]{padding:var(--spacing-3)}.k-block-type-text-input.k-writer-input:not([data-toolbar-inline=true])>.ProseMirror,.k-block-type-text-input.k-writer-input:not([data-toolbar-inline=true])[data-placeholder][data-empty=true]:before{padding:var(--spacing-3) var(--spacing-6)}.k-block-type-text-input.k-textarea-input .k-textarea-input-native{padding:var(--input-padding-multiline)}.k-block-type-video-figure video{pointer-events:none}.k-blocks-field{position:relative}.k-blocks-field>footer{display:flex;justify-content:center;margin-top:var(--spacing-3)}.k-string-input{padding:var(--input-padding);border-radius:var(--input-rounded)}.k-string-input:focus{outline:0}.k-string-input[data-font=monospace]{font-family:var(--font-mono)}.k-color-field{--color-frame-size: calc(var(--input-height) - var(--spacing-2))}.k-color-field .k-input-before{align-items:center;padding-inline-start:var(--spacing-1)}.k-color-field-options{--color-frame-size: var(--input-height)}.k-color-field-picker{padding:var(--spacing-3)}.k-color-field-picker-toggle{--color-frame-rounded: var(--rounded-sm);border-radius:var(--color-frame-rounded)}.k-color-field .k-colorname-input{padding-inline:var(--input-padding)}.k-color-field .k-colorname-input:focus{outline:0}.k-date-input:disabled::placeholder{opacity:0}.k-date-field-body{display:grid;gap:var(--spacing-2)}@container (min-width: 20rem){.k-date-field-body[data-has-time=true]{grid-template-columns:1fr minmax(6rem,9rem)}}.k-entries-field-items{display:flex;flex-direction:column;gap:2px}.k-entries-field-item{height:var(--input-height);display:flex;align-items:center;background:var(--input-color-back);border-radius:var(--rounded)}.k-entries-field:not([data-disabled=true]) .k-entries-field-item{--input-color-border: transparent;box-shadow:var(--shadow)}.k-entries-field-item-sort-handle.k-button{--button-height: var(--input-height);--button-width: var(--input-height)}.k-entries-field-item-input{flex-grow:1;border-inline:1px solid var(--panel-color-back)}.k-entries-field-item-options .k-button{--button-height: 100%;--button-width: var(--input-height)}@container (max-width: 30rem){.k-entries-field-item-options>.k-button:not(:last-of-type){display:none}}.k-entries-field-item-options .k-button:has(+.k-button){border-right:1px solid var(--panel-color-back)}.k-entries-field-item.k-sortable-ghost{outline:var(--outline);cursor:grabbing}.k-entries-field-item.k-sortable-fallback{display:none}.k-entries-field-footer{display:flex;justify-content:center;margin-top:var(--spacing-3)}.k-models-field[data-disabled=true] .k-item *{pointer-events:all!important}.k-headline-field{position:relative;padding-top:1.5rem}.k-fieldset>.k-grid .k-column:first-child .k-headline-field{padding-top:0}.k-headline-field h2.k-headline{font-weight:var(--font-normal)}.k-headline-field footer{margin-top:var(--spacing-2)}.k-info-field .k-headline{padding-bottom:.75rem;line-height:1.25rem}.k-layout-column{position:relative;height:100%;display:flex;flex-direction:column;min-height:6rem}.k-layout-column:focus{outline:0}.k-layout-column>.k-blocks{box-shadow:none;padding:0;height:100%;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);background:var(--csstools-light-dark-toggle--0, var(--color-white));min-height:4rem}@supports (color: light-dark(red,red)){.k-layout-column>.k-blocks{background:light-dark(var(--color-white),var(--color-gray-850))}}.k-layout-column>.k-blocks[data-empty=true]{min-height:6rem}.k-layout-column>.k-blocks>.k-blocks-list{display:flex;flex-direction:column;height:100%}.k-layout-column>.k-blocks>.k-blocks-list>.k-block-container:last-of-type{flex-grow:1}.k-layout-column>.k-blocks>.k-blocks-list+.k-blocks-empty.k-box{--box-color-back: transparent;position:absolute;top:0;right:0;bottom:0;left:0;justify-content:center;opacity:0;transition:opacity .3s;border:0}.k-layout-column>.k-blocks>.k-blocks-list+.k-blocks-empty:hover{opacity:1}.k-layout{--layout-border-color: var(--color-gray-300);--layout-toolbar-width: 2rem;position:relative;padding-inline-end:var(--layout-toolbar-width);box-shadow:var(--shadow)}[data-disabled=true] .k-layout{padding-inline-end:0}.k-layout:not(:last-of-type){margin-bottom:var(--spacing-2)}.k-layout:focus{outline:0}.k-layout-toolbar{position:absolute;inset-block:0;inset-inline-end:0;width:var(--layout-toolbar-width);display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding-bottom:var(--spacing-2);font-size:var(--text-sm);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);background:var(--csstools-light-dark-toggle--0, var(--color-gray-100));border-inline-start:1px solid var(--panel-color-back);color:var(--color-gray-500);border-radius:var(--rounded)}@supports (color: light-dark(red,red)){.k-layout-toolbar{background:light-dark(var(--color-gray-100),var(--color-gray-850))}}.k-layout-toolbar:hover{--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-white);color:var(--csstools-light-dark-toggle--1, var(--color-black))}@supports (color: light-dark(red,red)){.k-layout-toolbar:hover{color:light-dark(var(--color-black),var(--color-white))}}.k-layout-toolbar-button{width:var(--layout-toolbar-width);height:var(--layout-toolbar-width)}.k-layout-columns.k-grid{grid-gap:1px;background:var(--panel-color-back)}.k-layout:not(:first-child) .k-layout-columns.k-grid{border-top:0}.k-layouts .k-sortable-ghost{position:relative;box-shadow:#11111140 0 5px 10px;outline:2px solid var(--color-focus);cursor:grabbing;z-index:1}.k-layout-field>footer{display:flex;justify-content:center;margin-top:var(--spacing-3)}.k-line-field{position:relative;border:0;height:3rem;width:auto}.k-line-field:after{position:absolute;content:"";top:50%;margin-top:-1px;inset-inline:0;height:1px;background:var(--color-border)}.k-link-input-header{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:.25rem;height:var(--input-height);grid-area:header}.k-link-input-toggle.k-button{--button-height: var(--height-sm);--button-rounded: var(--rounded-sm);--button-color-back: var(--panel-color-back);margin-inline-start:.25rem}.k-link-input-model{display:flex;justify-content:space-between;margin-inline-end:var(--spacing-1)}.k-link-input-model-placeholder.k-button{--button-align: flex-start;--button-color-text: var(--color-gray-600);--button-height: var(--height-sm);--button-padding: var(--spacing-2);--button-rounded: var(--rounded-sm);flex-grow:1;overflow:hidden;white-space:nowrap;align-items:center}.k-link-field .k-link-field-preview{--tag-height: var(--height-sm);padding-inline:0}.k-link-field .k-link-field-preview .k-tag:focus{outline:0}.k-link-field .k-link-field-preview .k-tag:focus-visible{outline:var(--outline)}.k-link-field .k-link-field-preview .k-tag-text{font-size:var(--text-sm)}.k-link-input-model-toggle{align-self:center;--button-height: var(--height-sm);--button-width: var(--height-sm);--button-rounded: var(--rounded-sm)}.k-link-input-body{display:grid;overflow:hidden;border-top:1px solid var(--color-border);background:var(--input-color-back);--tree-color-back: var(--input-color-back);--tree-branch-color-back: var(--input-color-back);--tree-branch-hover-color-back: var(--panel-color-back)}.k-link-input-body[data-type=page] .k-page-browser{padding:var(--spacing-2);padding-bottom:calc(var(--spacing-2) - 1px);width:100%;container-type:inline-size;overflow:auto}.k-link-field .k-tags-field-preview{--tag-rounded: var(--rounded-sm);--tag-size: var(--height-sm);padding-inline:0}.k-link-field[data-disabled=true] .k-link-input-model-placeholder{display:none}.k-link-field[data-disabled=true] input::placeholder{opacity:0}.k-writer-input{position:relative;width:100%;display:grid;grid-template-areas:"content";gap:var(--spacing-1)}.k-writer-input .ProseMirror{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;white-space:pre-wrap;font-variant-ligatures:none;grid-area:content;padding:var(--input-padding-multiline)}.k-writer-input .ProseMirror:focus{outline:0}.k-writer-input .ProseMirror *{caret-color:currentColor}.k-writer-input .ProseMirror hr.ProseMirror-selectednode{outline:var(--outline)}.k-writer-input[data-placeholder][data-empty=true]:before{grid-area:content;content:attr(data-placeholder);color:var(--input-color-placeholder);pointer-events:none;white-space:pre-wrap;word-wrap:break-word;line-height:var(--text-line-height);padding:var(--input-padding-multiline)}.k-list-input.k-writer-input[data-placeholder][data-empty=true]:before{padding-inline-start:2.5em}.k-list-field .k-list-input .ProseMirror,.k-list-field .k-list-input:before{padding:.475rem .5rem .475rem .75rem}:root{--tag-color-back: var(--color-gray-950);--tag-color-text: var(--color-white);--tag-color-toggle: currentColor;--tag-color-disabled-back: var(--color-gray-600);--tag-color-disabled-text: var(--tag-color-text);--tag-height: var(--height-xs);--tag-rounded: var(--rounded-sm);--tag-text-size: var(--text-sm)}.k-tag[data-theme=light]{--tag-color-back: var(--panel-color-back);--tag-color-text: var(--color-text);--tag-color-disabled-back: var(--color-gray-200);--tag-color-disabled-text: var(--color-gray-600)}.k-tag{position:relative;height:var(--tag-height);max-width:100%;display:flex;align-items:center;justify-content:space-between;font-size:var(--tag-text-size);line-height:1;color:var(--tag-color-text);background-color:var(--tag-color-back);border-radius:var(--tag-rounded);-webkit-user-select:none;user-select:none}button.k-tag:not([aria-disabled=true]){cursor:pointer}.k-tag:not([aria-disabled=true]):focus{outline:var(--outline)}.k-tag-image{height:100%;border-radius:var(--rounded-xs);overflow:hidden;flex-shrink:0;border-radius:0;border-start-start-radius:var(--tag-rounded);border-end-start-radius:var(--tag-rounded);background-clip:padding-box}.k-tag-text{padding-inline:var(--spacing-2);line-height:var(--leading-tight);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.k-tag:has(.k-tag-toggle) .k-tag-text{padding-inline-end:0}.k-tag-toggle{--icon-size: 14px;width:var(--tag-height);height:var(--tag-height);filter:brightness(70%);flex-shrink:0}.k-tag-toggle:hover{filter:brightness(100%)}.k-tag:where([aria-disabled=true]){background-color:var(--tag-color-disabled-back);color:var(--tag-color-disabled-text);cursor:not-allowed}:root{--tags-gap: .375rem}.k-tags{display:inline-flex;max-width:100%;gap:var(--tags-gap);align-items:center;flex-wrap:wrap}.k-tags .k-sortable-ghost{outline:var(--outline)}.k-tags[data-layout=list],.k-tags[data-layout=list] .k-tag{width:100%}.k-tags.k-draggable .k-tag-text{cursor:grab}.k-tags.k-draggable .k-tag-text:active{cursor:grabbing}.k-multiselect-input{padding:var(--tags-gap);cursor:pointer}.k-multiselect-input-toggle.k-button{opacity:0}.k-tags-input{padding:var(--tags-gap)}.k-tags-input[data-can-add=true]{cursor:pointer}.k-tags-input-toggle.k-button{--button-color-text: var(--input-color-placeholder);opacity:0}.k-tags-input-toggle.k-button:focus{--button-color-text: var(--input-color-text)}.k-tags-input:focus-within .k-tags-input-toggle{opacity:1}.k-tags-input .k-picklist-dropdown{margin-top:var(--spacing-1)}.k-tags-input .k-picklist-dropdown .k-choice-input:focus-within{outline:var(--outline)}.k-number-input{padding:var(--input-padding);border-radius:var(--input-rounded)}.k-number-input:focus{outline:0}.k-table.k-object-field-table{table-layout:auto}.k-table.k-object-field-table tbody td{max-width:0}@container (max-width: 40rem){.k-object-field{overflow:hidden}.k-object-field-table.k-table tbody :where(th):is([data-mobile=true]){width:1px!important;white-space:normal;word-break:normal}}.k-range-input{--range-track-height: 1px;--range-tooltip-back: var(--color-black);display:flex;align-items:center;border-radius:var(--range-track-height)}.k-range-input input[type=range]:focus{outline:0}.k-range-input-tooltip{position:relative;display:flex;align-items:center;color:var(--color-white);font-size:var(--text-xs);font-variant-numeric:tabular-nums;line-height:1;text-align:center;border-radius:var(--rounded-sm);background:var(--range-tooltip-back);margin-inline-start:var(--spacing-3);padding:0 var(--spacing-1);white-space:nowrap}.k-range-input-tooltip:after{position:absolute;top:50%;inset-inline-start:-3px;width:0;height:0;transform:translateY(-50%);border-block:3px solid transparent;border-inline-end:3px solid var(--range-tooltip-back);content:""}.k-range-input-tooltip>*{padding:var(--spacing-1)}.k-range-input[data-disabled=true]{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--range-tooltip-back: var(--csstools-light-dark-toggle--0, var(--color-gray-600))}@supports not (color: light-dark(tan,tan)){.k-range-input[data-disabled=true] *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--range-tooltip-back: var(--csstools-light-dark-toggle--0, var(--color-gray-600))}}@supports (color: light-dark(red,red)){.k-range-input[data-disabled=true]{--range-tooltip-back: light-dark( var(--color-gray-600), var(--color-gray-850) )}}.k-input[data-type=range] .k-range-input{padding-inline:var(--input-padding)}.k-select-input{position:relative;display:block;overflow:hidden;padding:var(--input-padding);border-radius:var(--input-rounded)}.k-select-input[data-empty=true]{color:var(--input-color-placeholder)}.k-select-input-native{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;z-index:1}.k-select-input-native[disabled]{cursor:default}.k-input[data-type=select]{position:relative}.k-input[data-type=select] .k-input-icon{position:absolute;inset-block:0;inset-inline-end:0}.k-structure-field:not([data-disabled=true]) td.k-table-column{cursor:pointer}.k-structure-field .k-table+footer{display:flex;justify-content:center;margin-top:var(--spacing-3)}.k-text-input{padding:var(--input-padding);border-radius:var(--input-rounded)}.k-text-input:focus{outline:0}.k-text-input[data-font=monospace]{font-family:var(--font-mono)}.k-text-input:disabled::placeholder{opacity:0}.k-field-counter{display:none}.k-text-field:focus-within .k-field-counter{display:block}.k-toolbar.k-textarea-toolbar{border-end-start-radius:0;border-end-end-radius:0;border-bottom:1px solid var(--toolbar-border)}.k-toolbar.k-textarea-toolbar>.k-button:first-child{border-end-start-radius:0}.k-toolbar.k-textarea-toolbar>.k-button:last-child{border-end-end-radius:0}.k-textarea-input[data-size=small]{--textarea-size: 7.5rem}.k-textarea-input[data-size=medium]{--textarea-size: 15rem}.k-textarea-input[data-size=large]{--textarea-size: 30rem}.k-textarea-input[data-size=huge]{--textarea-size: 45rem}.k-textarea-input-wrapper{position:relative;display:block}.k-textarea-input-native{resize:none;min-height:var(--textarea-size)}.k-textarea-input-native:focus{outline:0}.k-textarea-input-native[data-font=monospace]{font-family:var(--font-mono)}.k-input[data-type=textarea] .k-input-element{min-width:0}.k-input[data-type=textarea] .k-textarea-input-native{padding:var(--input-padding-multiline)}.k-time-input:disabled::placeholder{opacity:0}.k-choice-input{display:flex;gap:var(--spacing-3);min-width:0}.k-choice-input input{top:2px}.k-choice-input-label{display:flex;line-height:1.25rem;flex-direction:column;min-width:0;color:var(--choice-color-text)}.k-choice-input-label>*{display:block;overflow:hidden;text-overflow:ellipsis}.k-choice-input-label-info{color:var(--choice-color-info)}.k-choice-input[aria-disabled=true]{cursor:not-allowed}:where(.k-checkboxes-field,.k-radio-field) .k-choice-input{min-height:var(--input-height);padding-block:var(--spacing-2);padding-inline:var(--spacing-3);border-radius:var(--input-rounded)}:where(.k-checkboxes-field,.k-radio-field) .k-choice-input{background:var(--item-color-back);box-shadow:var(--shadow)}.k-input[data-type=toggle]{--input-color-border: transparent;--input-shadow: var(--shadow)}.k-input[data-type=toggle] .k-input-before{padding-inline-end:calc(var(--input-padding) / 2)}.k-input[data-type=toggle] .k-toggle-input{padding-inline-start:var(--input-padding)}.k-input[data-type=toggle][data-disabled=true]{box-shadow:none;border:1px solid var(--color-border)}.k-input[data-type=toggles]{display:inline-flex}.k-input[data-type=toggles].grow{display:flex}.k-input[data-type=toggles]:has(.k-empty){outline:0;display:flex}.k-toggles-input ul{display:grid;grid-template-columns:repeat(var(--options),minmax(0,1fr));gap:1px;border-radius:var(--rounded);line-height:1;background:var(--color-border);overflow:hidden}.k-toggles-input li{height:var(--field-input-height)}.k-toggles-input label{align-items:center;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);background:var(--csstools-light-dark-toggle--0, var(--color-white));cursor:pointer;display:flex;font-size:var(--text-sm);justify-content:center;line-height:1.25;padding:0 var(--spacing-3);height:100%}@supports (color: light-dark(red,red)){.k-toggles-input label{background:light-dark(var(--color-white),var(--color-gray-850))}}.k-toggles-input li:has(input[disabled]) label{color:var(--color-text-dimmed);background:var(--panel-color-back)}.k-toggles-input .k-icon+.k-toggles-text{margin-inline-start:var(--spacing-2)}.k-toggles-input input:focus:not(:checked)+label{--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-blue-800);background:var(--csstools-light-dark-toggle--1, var(--color-blue-200))}@supports (color: light-dark(red,red)){.k-toggles-input input:focus:not(:checked)+label{background:light-dark(var(--color-blue-200),var(--color-blue-800))}}.k-toggles-input input:checked+label{--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-950);background:var(--csstools-light-dark-toggle--2, var(--color-black));color:var(--color-white)}@supports (color: light-dark(red,red)){.k-toggles-input input:checked+label{background:light-dark(var(--color-black),var(--color-gray-950))}}.k-alpha-input{--range-track-back: linear-gradient(to right, transparent, currentColor);--range-track-height: var(--range-thumb-size);color:#000;background:#fff var(--pattern-light)}.k-calendar-input{--button-height: var(--height-sm);--button-width: var(--button-height);--button-padding: 0;padding:var(--spacing-2);width:min-content}.k-calendar-table{table-layout:fixed;min-width:15rem}.k-calendar-input .k-button{justify-content:center}.k-calendar-input>nav{display:flex;direction:ltr;align-items:center;margin-bottom:var(--spacing-2)}.k-calendar-selects{flex-grow:1;display:flex;align-items:center;justify-content:center}[dir=ltr] .k-calendar-selects{direction:ltr}[dir=rtl] .k-calendar-selects{direction:rtl}.k-calendar-selects .k-select-input{display:flex;align-items:center;text-align:center;height:var(--button-height);padding:0 .5rem;border-radius:var(--input-rounded)}.k-calendar-selects .k-select-input:focus-within{outline:var(--outline)}.k-calendar-input th{padding-block:.5rem;color:var(--color-gray-500);font-size:var(--text-xs);text-align:center}.k-calendar-day{padding:2px}.k-calendar-day[aria-current=date] .k-button{text-decoration:underline}.k-calendar-day[aria-selected=date] .k-button,.k-calendar-day[aria-selected=date] .k-button:focus{--button-color-text: var(--color-text);--button-color-back: var(--color-blue-500)}.k-calendar-day[aria-selected=date] .k-button:focus-visible{outline-offset:2px}.k-calendar-today{padding-top:var(--spacing-2);text-align:center}.k-calendar-today .k-button{--button-width: auto;--button-padding: var(--spacing-3);font-size:var(--text-xs);text-decoration:underline}.k-coloroptions-input{--color-preview-size: var(--input-height)}.k-coloroptions-input ul{display:grid;grid-template-columns:repeat(auto-fill,var(--color-preview-size));gap:var(--spacing-2)}.k-coloroptions-input input:focus+.k-color-frame{outline:var(--outline)}.k-coloroptions-input[disabled] label{opacity:var(--opacity-disabled);cursor:not-allowed}.k-coloroptions-input input:checked+.k-color-frame{outline:1px solid var(--color-gray-600);outline-offset:2px}.k-colorpicker-input{--h: 0;--s: 0%;--l: 0%;--a: 1;--range-thumb-size: .75rem;--range-track-height: .75rem;display:flex;flex-direction:column;gap:var(--spacing-3);width:max-content}.k-colorpicker-input .k-coords-input{border-radius:var(--rounded-sm);aspect-ratio:1/1;background:linear-gradient(to bottom,transparent,#000),linear-gradient(to right,#fff,hsl(var(--h),100%,50%))}.k-colorpicker-input .k-alpha-input{color:hsl(var(--h),var(--s),var(--l))}.k-colorpicker-input .k-coloroptions-input ul{grid-template-columns:repeat(6,1fr)}.k-coords-input{position:relative;display:block!important}.k-coords-input-thumb{position:absolute;aspect-ratio:1/1;width:var(--range-thumb-size);background:var(--range-thumb-color);border-radius:var(--range-thumb-size);box-shadow:var(--range-thumb-shadow);transform:translate(-50%,-50%);cursor:move}.k-coords-input[data-empty=true] .k-coords-input-thumb{opacity:0}.k-coords-input-thumb:active{cursor:grabbing}.k-coords-input:focus-within{outline:var(--outline)}.k-coords-input[aria-disabled=true]{pointer-events:none;opacity:var(--opacity-disabled)}.k-coords-input .k-coords-input-thumb:focus{outline:var(--outline)}.k-hue-input{--range-track-back: linear-gradient( to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 16.67%, hsl(120, 100%, 50%) 33.33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 66.67%, hsl(320, 100%, 50%) 83.33%, hsl(360, 100%, 50%) 100% ) no-repeat;--range-track-height: var(--range-thumb-size)}.k-timeoptions-input{--button-height: var(--height-sm);display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-3)}.k-timeoptions-input h3{display:flex;align-items:center;padding-inline:var(--button-padding);height:var(--button-height);margin-bottom:var(--spacing-1)}.k-timeoptions-input hr{margin:var(--spacing-2) var(--spacing-3)}.k-timeoptions-input .k-button[aria-selected=time]{--button-color-text: var(--color-text);--button-color-back: var(--color-blue-500)}.k-layout-selector h3{margin-top:-.5rem;margin-bottom:var(--spacing-3)}.k-layout-selector-options{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--spacing-6)}@media screen and (min-width: 65em){.k-layout-selector-options{grid-template-columns:repeat(var(--columns),1fr)}}.k-layout-selector-option{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) hsla(var(--color-gray-hs), 60%, 10%);--color-border: var(--csstools-light-dark-toggle--0, hsla(var(--color-gray-hs), 0%, 6%));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-950);--color-back: var(--csstools-light-dark-toggle--1, var(--color-white));border-radius:var(--rounded)}@supports not (color: light-dark(tan,tan)){.k-layout-selector-option *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) hsla(var(--color-gray-hs), 60%, 10%);--color-border: var(--csstools-light-dark-toggle--0, hsla(var(--color-gray-hs), 0%, 6%));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-950);--color-back: var(--csstools-light-dark-toggle--1, var(--color-white))}}@supports (color: light-dark(red,red)){.k-layout-selector-option{--color-border: light-dark( hsla(var(--color-gray-hs), 0%, 6%), hsla(var(--color-gray-hs), 60%, 10%) );--color-back: light-dark(var(--color-white), var(--color-gray-950))}}.k-layout-selector-option:focus-visible{outline:var(--outline);outline-offset:-1px}.k-layout-selector-option .k-grid{border:1px solid var(--color-border);gap:1px;grid-template-columns:repeat(var(--columns),1fr);cursor:pointer;background:var(--color-border);border-radius:var(--rounded);overflow:hidden;box-shadow:var(--shadow);height:5rem}.k-layout-selector-option .k-column{grid-column:span var(--span);background:var(--color-back);height:100%}.k-layout-selector-option:hover{--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-800);--color-border: var(--csstools-light-dark-toggle--2, var(--color-gray-500));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-900);--color-back: var(--csstools-light-dark-toggle--3, var(--color-gray-100))}@supports not (color: light-dark(tan,tan)){.k-layout-selector-option:hover *{--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-800);--color-border: var(--csstools-light-dark-toggle--2, var(--color-gray-500));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-900);--color-back: var(--csstools-light-dark-toggle--3, var(--color-gray-100))}}@supports (color: light-dark(red,red)){.k-layout-selector-option:hover{--color-border: light-dark(var(--color-gray-500), var(--color-gray-800));--color-back: light-dark(var(--color-gray-100), var(--color-gray-900))}}.k-layout-selector-option[aria-current=true]{--color-border: var(--color-focus);--color-back: var(--color-blue-300)}.k-tags-field-preview{--tags-gap: .25rem;--tag-text-size: var(--text-xs);padding:.375rem var(--table-cell-padding);overflow:hidden}.k-tags-field-preview .k-tags{flex-wrap:nowrap}.k-bubbles{display:flex;gap:.25rem}.k-bubbles-field-preview{--bubble-back: var(--panel-color-back);--bubble-text: var(--color-text);padding:.375rem var(--table-cell-padding);overflow:hidden}.k-bubbles-field-preview .k-bubbles{gap:.375rem}.k-color-field-preview{--color-frame-rounded: var(--tag-rounded);--color-frame-size: var(--tag-height);padding:.375rem var(--table-cell-padding);display:flex;align-items:center;gap:var(--spacing-2)}.k-text-field-preview{padding:.325rem .75rem;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.k-url-field-preview{padding-inline:var(--table-cell-padding)}.k-url-field-preview[data-link=true]{color:var(--link-color)}.k-url-field-preview a{display:inline-flex;align-items:center;height:var(--height-xs);padding-inline:var(--spacing-1);margin-inline:calc(var(--spacing-1) * -1);border-radius:var(--rounded);max-width:100%;min-width:0}.k-url-field-preview a>*{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-decoration:underline;text-underline-offset:var(--link-underline-offset)}.k-url-field-preview a:hover{color:var(--link-color-hover)}.k-flag-field-preview{--button-height: var(--table-row-height);--button-width: 100%;outline-offset:-2px}.k-html-field-preview{padding:.375rem var(--table-cell-padding);overflow:hidden;text-overflow:ellipsis}.k-image-field-preview{height:100%}.k-link-field-preview{--tag-height: var(--height-xs);--tag-color-back: var(--panel-color-back);--tag-color-text: currentColor;--tag-color-toggle: var(--tag-color-text);--tag-color-toggle-border: var(--color-gray-300);--tag-color-focus-back: var(--tag-color-back);--tag-color-focus-text: var(--tag-color-text);padding-inline:var(--table-cell-padding);min-width:0}.k-link-field-preview .k-tag{min-width:0;max-width:100%}.k-link-field-preview .k-tag-text{font-size:var(--text-xs);min-width:0}.k-toggle-field-preview{padding-inline:var(--table-cell-padding)}:root{--toolbar-size: var(--height);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-white);--toolbar-text: var(--csstools-light-dark-toggle--0, var(--color-black));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-850);--toolbar-back: var(--csstools-light-dark-toggle--1, var(--color-white));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-750);--toolbar-hover: var(--csstools-light-dark-toggle--2, var(--color-gray-200));--toolbar-border: var(--panel-color-back);--toolbar-current: var(--color-focus)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-white);--toolbar-text: var(--csstools-light-dark-toggle--0, var(--color-black));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-850);--toolbar-back: var(--csstools-light-dark-toggle--1, var(--color-white));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-750);--toolbar-hover: var(--csstools-light-dark-toggle--2, var(--color-gray-200))}}@supports (color: light-dark(red,red)){:root{--toolbar-text: light-dark(var(--color-black), var(--color-white));--toolbar-back: light-dark(var(--color-white), var(--color-gray-850));--toolbar-hover: light-dark(var(--color-gray-200), var(--color-gray-750))}}:where(.k-textarea-input,.k-writer-input):not(:focus-within){--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-700);--toolbar-text: var(--csstools-light-dark-toggle--3, var(--color-gray-300))}@supports not (color: light-dark(tan,tan)){:where(.k-textarea-input,.k-writer-input):not(:focus-within) *{--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-700);--toolbar-text: var(--csstools-light-dark-toggle--3, var(--color-gray-300))}}@supports (color: light-dark(red,red)){:where(.k-textarea-input,.k-writer-input):not(:focus-within){--toolbar-text: light-dark(var(--color-gray-300), var(--color-gray-700))}}.k-toolbar{display:flex;max-width:100%;height:var(--toolbar-size);align-items:center;overflow-x:auto;overflow-y:hidden;color:var(--toolbar-text);background:var(--toolbar-back);border-radius:var(--rounded)}.k-toolbar>hr{height:var(--toolbar-size);width:1px;border-left:1px solid var(--toolbar-border)}.k-toolbar-button.k-button{--button-width: var(--toolbar-size);--button-height: var(--toolbar-size);--button-rounded: 0;outline-offset:-2px}.k-toolbar-button:hover{--button-color-back: var(--toolbar-hover)}.k-toolbar .k-button[aria-current=true]{--button-color-text: var(--toolbar-current)}.k-toolbar>.k-button:first-child{border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded)}.k-toolbar>.k-button:last-child{border-start-end-radius:var(--rounded);border-end-end-radius:var(--rounded)}:where(.k-textarea-input,.k-writer-input):not(:focus-within){--toolbar-text: var(--color-gray-400);--toolbar-border: var(--panel-color-back)}.k-toolbar:not([data-inline=true]):has(~:focus-within){position:sticky;top:var(--header-sticky-offset);inset-inline:0;z-index:1;box-shadow:#0000000d 0 2px 5px}.k-writer-input:has(.k-toolbar:not([data-inline=true],[data-disabled=true])){grid-template-areas:"topbar" "content";grid-template-rows:var(--toolbar-size) 1fr;gap:0}.k-writer-toolbar:not(:has(~:focus-within)){--toolbar-current: currentColor}.k-writer-toolbar[data-inline=true]{position:absolute;z-index:calc(var(--z-dropdown) + 1);max-width:none;box-shadow:var(--shadow-toolbar)}.k-writer-toolbar:not([data-inline=true]){border-end-start-radius:0;border-end-end-radius:0;border-bottom:1px solid var(--toolbar-border)}.k-writer-toolbar:not([data-inline=true])>.k-button:first-child{border-end-start-radius:0}.k-writer-toolbar:not([data-inline=true])>.k-button:last-child{border-end-end-radius:0}:root{--bar-height: var(--height-xs)}.k-bar{display:flex;align-items:center;gap:var(--spacing-3);height:var(--bar-height);justify-content:space-between}.k-bar:where([data-align=center]){justify-content:center}.k-bar:where([data-align=end]):has(:first-child:last-child){justify-content:end}:root{--box-height: var( --field-input-height );--box-padding-inline: var(--spacing-2);--box-font-size: var(--text-sm);--box-color-back: none;--box-color-text: currentColor}.k-box{--icon-color: var(--box-color-icon);--text-font-size: var(--box-font-size);display:flex;width:100%;align-items:center;gap:var(--spacing-2);color:var(--box-color-text);background:var(--box-color-back);word-wrap:break-word}.k-box[data-theme]{--box-color-back: var(--theme-color-back);--box-color-text: var(--theme-color-text-highlight);--box-color-icon: var(--theme-color-700);--link-color: var(--box-color-text);--link-color-hover: var(--box-color-text);min-height:var(--box-height);line-height:1.25;padding:.375rem var(--box-padding-inline);border-radius:var(--rounded)}.k-box[data-theme=text],.k-box[data-theme=white]{box-shadow:var(--shadow)}.k-box[data-theme=text]{padding:var(--spacing-6)}.k-box[data-theme=none]{padding:0}.k-box[data-align=center]{justify-content:center}:root{--bubble-size: 1.525rem;--bubble-back: var(--panel-color-back);--bubble-rounded: var(--rounded-sm);--bubble-text: var(--color-black)}.k-bubble{width:min-content;height:var(--bubble-size);white-space:nowrap;line-height:1.5;background:var(--bubble-back);color:var(--bubble-text);border-radius:var(--bubble-rounded);overflow:hidden}.k-bubble .k-frame{width:var(--bubble-size);height:var(--bubble-size)}.k-bubble:has(.k-bubble-text){display:flex;gap:var(--spacing-2);align-items:center;padding-inline-end:.5rem;font-size:var(--text-xs)}.k-column{min-width:0}.k-column[data-sticky=true]{align-self:stretch}.k-column[data-sticky=true]>div{position:sticky;top:calc(var(--header-sticky-offset) + 2vh);z-index:2}.k-column[data-disabled=true]{cursor:not-allowed;opacity:.4}.k-column[data-disabled=true] *{pointer-events:none}.k-column[data-disabled=true] .k-text[data-theme=help] *{pointer-events:initial}.k-frame{--fit: contain;--ratio: 1/1;position:relative;display:flex;justify-content:center;align-items:center;aspect-ratio:var(--ratio);background:var(--back);overflow:hidden}.k-frame:where([data-theme]){--back: var(--theme-color-back);color:var(--theme-color-text-highlight)}.k-frame *:where(img,video,iframe,button){position:absolute;top:0;right:0;bottom:0;left:0;height:100%;width:100%;object-fit:var(--fit)}.k-frame>*{overflow:hidden;text-overflow:ellipsis;min-width:0;min-height:0}:root{--color-frame-back: none;--color-frame-pattern: var(--pattern-light);--color-frame-rounded: var(--rounded);--color-frame-size: 100%;--color-frame-darkness: 0%}:root:has(.k-panel[data-theme=dark]){--color-frame-pattern: var(--pattern-dark)}.k-color-frame.k-frame{background:var(--color-frame-pattern);width:var(--color-frame-size);color:transparent;border-radius:var(--color-frame-rounded);overflow:hidden;background-clip:padding-box}.k-color-frame:after{border-radius:var(--color-frame-rounded);box-shadow:0 0 0 1px inset hsla(0,0%,var(--color-frame-darkness),.175);position:absolute;top:0;right:0;bottom:0;left:0;background:var(--color-frame-back);content:""}.k-dropzone{position:relative}.k-dropzone:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;display:none;pointer-events:none;z-index:1;border-radius:var(--rounded)}.k-dropzone[data-over=true]:after{display:block;background:hsla(var(--color-blue-hs),var(--color-blue-l-300),.6);outline:var(--outline)}.k-grid{--columns: 12;--grid-inline-gap: 0;--grid-block-gap: 0;display:grid;align-items:start;grid-column-gap:var(--grid-inline-gap);grid-row-gap:var(--grid-block-gap)}.k-grid>*{--width: calc(1 / var(--columns));--span: calc(var(--columns) * var(--width))}@container (min-width: 30rem){.k-grid{grid-template-columns:repeat(var(--columns),1fr)}.k-grid>*{grid-column:span var(--span)}}:root{--columns-inline-gap: clamp(.75rem, 6cqw, 6rem);--columns-block-gap: var(--spacing-8)}.k-grid[data-variant=columns]{--grid-inline-gap: var(--columns-inline-gap);--grid-block-gap: var(--columns-block-gap)}.k-grid:where([data-variant=columns],[data-variant=fields])>*{container:column / inline-size}.k-grid[data-variant=fields]{gap:var(--spacing-8)}.k-grid[data-variant=choices]{align-items:stretch;gap:2px}:root{--header-color-back: var(--panel-color-back);--header-padding-block: var(--spacing-4);--header-sticky-offset: var(--scroll-top)}.k-header{position:relative;display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;column-gap:var(--spacing-3);border-bottom:1px solid var(--color-border);background:var(--header-color-back);padding-top:var(--header-padding-block);margin-bottom:var(--spacing-12);box-shadow:2px 0 0 0 var(--header-color-back),-2px 0 0 0 var(--header-color-back)}.k-header:has(+.k-tabs){margin-bottom:0}.k-header-title{font-size:var(--text-h1);font-weight:var(--font-h1);line-height:var(--leading-h1);margin-bottom:var(--header-padding-block);min-width:0}.k-header-title-button{display:inline-flex;text-align:start;gap:var(--spacing-2);align-items:baseline;max-width:100%;outline:0}.k-header-title-text{overflow-x:clip;text-overflow:ellipsis}.k-header-title-icon{--icon-color: var(--color-text-dimmed);border-radius:var(--rounded);transition:opacity .2s;display:grid;flex-shrink:0;place-items:center;height:var(--height-sm);width:var(--height-sm);opacity:0}.k-header-title-button:is(:hover,:focus) .k-header-title-icon{opacity:1}.k-header-title-button:is(:focus) .k-header-title-icon{outline:var(--outline)}.k-header-buttons{display:flex;gap:var(--spacing-2);margin-bottom:var(--header-padding-block)}.k-header:has(.k-header-buttons){position:sticky;top:var(--scroll-top);z-index:var(--z-toolbar)}:root:has(.k-header .k-header-buttons){--header-sticky-offset: calc(var(--scroll-top) + 4rem)}:root{--icon-size: 18px;--icon-color: currentColor}.k-icon{width:var(--icon-size);height:var(--icon-size);flex-shrink:0;color:var(--icon-color)}.k-icon[data-type=loader]{animation:Spin 1.5s linear infinite}@media only screen and (-webkit-min-device-pixel-ratio: 2),not all,not all,not all,only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){.k-button-icon [data-type=emoji]{font-size:1.25em}}.k-icon-frame [data-type=emoji]{overflow:visible}.k-image[data-back=pattern]{--back: var(--color-black) var(--pattern)}.k-image[data-back=black]{--back: var(--color-black)}.k-image[data-back=white]{--back: var(--color-white);color:var(--color-gray-900)}:root{--overlay-color-back: rgba(0, 0, 0, .6);--overlay-color-back-dimmed: rgba(0, 0, 0, .2)}.k-overlay[open]{position:fixed;overscroll-behavior:contain;top:0;right:0;bottom:0;left:0;width:100%;height:100vh;height:100dvh;background:none;z-index:var(--z-dialog);transform:translateZ(0);overflow:hidden}.k-overlay[open]::backdrop{background:none}.k-overlay[open]>.k-portal{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay-color-back);overflow:auto}.k-overlay[open][data-type=dialog]>.k-portal{display:inline-flex}.k-overlay[open][data-type=dialog]>.k-portal>*{margin:auto}.k-overlay[open][data-type=drawer]>.k-portal{--overlay-color-back: var(--overlay-color-back-dimmed);display:flex;align-items:stretch;justify-content:flex-end}html[data-overlay=true]{overflow:hidden}html[data-overlay=true] body{overflow:scroll}:root{--stat-color-back: var(--item-color-back);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--stat-color-hover-back: var(--csstools-light-dark-toggle--0, var(--color-gray-100));--stat-info-text-color: var(--color-text-dimmed);--stat-value-text-size: var(--text-2xl)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--stat-color-hover-back: var(--csstools-light-dark-toggle--0, var(--color-gray-100))}}@supports (color: light-dark(red,red)){:root{--stat-color-hover-back: light-dark( var(--color-gray-100), var(--color-gray-850) )}}.k-stat{display:flex;flex-direction:column;padding:var(--spacing-3) var(--spacing-6);background:var(--stat-color-back);border-radius:var(--rounded);box-shadow:var(--shadow);line-height:var(--leading-normal)}.k-stat.k-link:hover{cursor:pointer;background:var(--stat-color-hover-back)}.k-stat :where(dt,dd){display:block}.k-stat-value{order:1;font-size:var(--stat-value-text-size);margin-bottom:var(--spacing-1)}.k-stat-label{--icon-size: var(--text-sm);order:2;display:flex;justify-content:start;align-items:center;gap:var(--spacing-1);font-size:var(--text-xs)}.k-stat-info{order:3;font-size:var(--text-xs);color:var(--stat-info-text-color)}.k-stat:is([data-theme]) .k-stat-info{--stat-info-text-color: var(--theme-color-text)}.k-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));grid-auto-rows:1fr;grid-gap:var(--spacing-2px)}.k-stats[data-size=small]{--stat-value-text-size: var(--text-md)}.k-stats[data-size=medium]{--stat-value-text-size: var(--text-xl)}.k-stats[data-size=large]{--stat-value-text-size: var(--text-2xl)}.k-stats[data-size=huge]{--stat-value-text-size: var(--text-3xl)}:root{--table-cell-padding: var(--spacing-3);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--table-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) rgba(0, 0, 0, .375);--table-color-border: var(--csstools-light-dark-toggle--1, rgba(0, 0, 0, .08));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) rgba(0, 0, 0, .1);--table-color-hover: var(--csstools-light-dark-toggle--2, var(--color-gray-100));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-800);--table-color-th-back: var(--csstools-light-dark-toggle--3, var(--color-gray-100));--table-color-th-text: var(--color-text-dimmed);--table-row-height: var(--input-height)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--table-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) rgba(0, 0, 0, .375);--table-color-border: var(--csstools-light-dark-toggle--1, rgba(0, 0, 0, .08));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) rgba(0, 0, 0, .1);--table-color-hover: var(--csstools-light-dark-toggle--2, var(--color-gray-100));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-800);--table-color-th-back: var(--csstools-light-dark-toggle--3, var(--color-gray-100))}}@supports (color: light-dark(red,red)){:root{--table-color-back: light-dark(var(--color-white), var(--color-gray-850));--table-color-border: light-dark(rgba(0, 0, 0, .08), rgba(0, 0, 0, .375));--table-color-hover: light-dark(var(--color-gray-100), rgba(0, 0, 0, .1));--table-color-th-back: light-dark( var(--color-gray-100), var(--color-gray-800) )}}.k-table{position:relative;background:var(--table-color-back);box-shadow:var(--shadow);border-radius:var(--rounded)}.k-table table{table-layout:fixed}.k-table th,.k-table td{padding-inline:var(--table-cell-padding);height:var(--table-row-height);overflow:hidden;text-overflow:ellipsis;width:100%;border-inline-end:1px solid var(--table-color-border);line-height:1.25}.k-table tr>*:last-child{border-inline-end:0}.k-table th,.k-table tr:not(:last-child) td{border-block-end:1px solid var(--table-color-border)}.k-table :where(td,th)[data-align]{text-align:var(--align)}.k-table th{padding-inline:var(--table-cell-padding);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--table-color-th-text);background:var(--table-color-th-back)}.k-table th[data-has-button=true]{padding:0}.k-table th button{padding-inline:var(--table-cell-padding);height:100%;width:100%;border-radius:var(--rounded);text-align:start}.k-table th button:focus-visible{outline-offset:-2px}.k-table thead th:first-child{border-start-start-radius:var(--rounded)}.k-table thead th:last-child{border-start-end-radius:var(--rounded)}.k-table thead th{position:sticky;top:var(--header-sticky-offset);inset-inline:0;z-index:1}.k-table tbody tr td{background:var(--table-color-back)}.k-table tbody tr:hover td{background:var(--table-color-hover)}.k-table tbody th{width:auto;white-space:nowrap;overflow:visible;border-radius:0}.k-table tbody tr:first-child th{border-start-start-radius:var(--rounded)}.k-table tbody tr:last-child th{border-end-start-radius:var(--rounded);border-block-end:0}.k-table-row-ghost{background:var(--table-color-back);outline:var(--outline);border-radius:var(--rounded);margin-bottom:2px;cursor:grabbing}.k-table-row-fallback{opacity:0!important}.k-table .k-table-index-column{width:var(--table-row-height);text-align:center}.k-table .k-table-index{font-size:var(--text-xs);color:var(--color-text-dimmed);line-height:1.1em}.k-table .k-table-index-column:has(.k-table-index-checkbox){padding:0}.k-table tr[data-sortable=true] .k-table-index-column .k-sort-handle{--button-width: 100%;display:none}.k-table tr[data-sortable=true]:hover .k-table-index-column .k-table-index{display:none}.k-table tr[data-sortable=true]:hover .k-table-index-column .k-sort-handle{display:flex}.k-table tr[data-selectable=true]:has(.k-table-select-checkbox input:checked){--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-blue-800);--table-color-back: var(--csstools-light-dark-toggle--4, var(--color-blue-250));--table-color-hover: var(--table-color-back)}@supports not (color: light-dark(tan,tan)){.k-table tr[data-selectable=true]:has(.k-table-select-checkbox input:checked) *{--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-blue-800);--table-color-back: var(--csstools-light-dark-toggle--4, var(--color-blue-250))}}@supports (color: light-dark(red,red)){.k-table tr[data-selectable=true]:has(.k-table-select-checkbox input:checked){--table-color-back: light-dark(var(--color-blue-250), var(--color-blue-800))}}.k-table .k-table-select-checkbox{height:100%;display:grid;place-items:center}.k-table .k-table-options-column{padding:0;width:var(--table-row-height);text-align:center}.k-table .k-table-options-column .k-options-dropdown-toggle{--button-width: 100%;--button-height: 100%;outline-offset:-2px}.k-table-empty{color:var(--color-text-dimmed);font-size:var(--text-sm)}.k-table[aria-disabled=true]{--table-color-back: transparent;--table-color-border: var(--color-border);--table-color-hover: transparent;--table-color-th-back: transparent;border:1px solid var(--table-color-border);box-shadow:none}.k-table[aria-disabled=true] thead th{position:static}@container (max-width: 40rem){.k-table{overflow-x:auto}.k-table thead th{position:static}.k-table .k-options-dropdown-toggle{aspect-ratio:auto!important}.k-table :where(th,td):not(.k-table-index-column,.k-table-options-column,[data-column-id=image],[data-column-id=flag]){width:auto!important}.k-table :where(th,td):not([data-mobile=true]){display:none}}.k-table-pagination{border-top:1px solid var(--table-color-border);height:var(--table-row-height);background:var(--table-color-th-back);display:flex;justify-content:center;border-end-start-radius:var(--rounded);border-end-end-radius:var(--rounded)}.k-table-pagination>.k-button{--button-color-back: transparent;border-left:0!important}.k-table .k-table-cell{padding:0}.k-tabs{--button-height: var(--height-md);--button-padding: var(--spacing-2);display:flex;gap:var(--spacing-1);margin-bottom:var(--spacing-12);margin-inline:calc(var(--button-padding) * -1)}.k-tabs-button.k-button{position:relative;margin-block:2px;overflow-x:visible}.k-tabs-button[aria-current=true]:after{position:absolute;content:"";height:2px;inset-inline:var(--button-padding);bottom:-2px;background:var(--color-text)}.k-tabs-button .k-button-badge{top:3px;inset-inline-end:calc(var(--button-padding) / 4)}.k-fatal[open]{background:var(--overlay-color-back);padding:var(--spacing-6)}.k-fatal-box{position:relative;width:100%;box-shadow:var(--dialog-shadow);border-radius:var(--dialog-rounded);line-height:1;height:calc(100vh - 3rem);height:calc(100dvh - 3rem);display:flex;flex-direction:column;overflow:hidden}.k-fatal-iframe{border:0;width:100%;flex-grow:1;background:var(--color-white);padding:var(--spacing-3)}.k-icons{position:absolute;width:0;height:0}.k-notification{padding:.75rem 1.5rem;background:var(--color-gray-900);width:100%;line-height:1.25rem;color:var(--color-white);display:flex;flex-shrink:0;align-items:center}.k-notification[data-theme]{background:var(--theme-color-back);color:var(--color-black)}.k-notification p{flex-grow:1;word-wrap:break-word;overflow:hidden}.k-notification .k-button{display:flex;margin-inline-start:1rem}.k-offline-warning{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-offline);background:var(--overlay-color-back);display:flex;align-items:center;justify-content:center;line-height:1}.k-offline-warning p{display:flex;align-items:center;gap:.5rem;background:var(--color-white);box-shadow:var(--shadow);padding:.75rem;border-radius:var(--rounded)}.k-offline-warning p .k-icon{color:var(--color-red-400)}:root{--progress-height: var(--spacing-2);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--progress-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300));--progress-color-value: var(--color-focus)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-850);--progress-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300))}}@supports (color: light-dark(red,red)){:root{--progress-color-back: light-dark(var(--color-gray-300), var(--color-gray-850))}}progress{display:block;width:100%;height:var(--progress-height);border-radius:var(--progress-height);overflow:hidden;background:var(--progress-color-back);border:0}progress::-webkit-progress-bar{background:var(--progress-color-back)}progress::-webkit-progress-value{background:var(--progress-color-value);border-radius:var(--progress-height)}progress::-moz-progress-bar{background:var(--progress-color-value);border-radius:var(--progress-height)}progress:not([value])::-webkit-progress-bar{background:var(--progress-color-value)}progress:not([value])::-moz-progress-bar{background:var(--progress-color-value)}.k-sort-handle{cursor:grab;z-index:1}.k-sort-handle:active{cursor:grabbing}.k-breadcrumb{--breadcrumb-divider: "/";overflow-x:clip;padding:2px}.k-breadcrumb ol{display:none;gap:.125rem;align-items:center}.k-breadcrumb ol li{display:flex;align-items:center;min-width:0;transition:flex-shrink .1s}.k-breadcrumb ol li:has(.k-icon){min-width:2.25rem}.k-breadcrumb ol li:not(:last-child):after{content:var(--breadcrumb-divider);opacity:.175;flex-shrink:0}.k-breadcrumb .k-icon[data-type=loader]{opacity:.5}.k-breadcrumb ol li:is(:hover,:focus-within){flex-shrink:0}.k-button.k-breadcrumb-link{flex-shrink:1;min-width:0;justify-content:flex-start}.k-breadcrumb-dropdown{display:grid}.k-breadcrumb-dropdown .k-dropdown-content{width:15rem}@container (min-width: 40em){.k-breadcrumb ol{display:flex}.k-breadcrumb-dropdown{display:none}}:root{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--browser-item-hover-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300));--browser-item-hover-color-text: currentColor;--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-blue-800);--browser-item-selected-color-back: var(--csstools-light-dark-toggle--1, var(--color-blue-300));--browser-item-selected-color-text: currentColor;--browser-item-gap: 1px;--browser-item-size: 1fr;--browser-item-height: var(--height-sm);--browser-item-padding: .25rem;--browser-item-rounded: var(--rounded)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--browser-item-hover-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-blue-800);--browser-item-selected-color-back: var(--csstools-light-dark-toggle--1, var(--color-blue-300))}}@supports (color: light-dark(red,red)){:root{--browser-item-hover-color-back: light-dark( var(--color-gray-300), var(--color-gray-950) );--browser-item-selected-color-back: light-dark( var(--color-blue-300), var(--color-blue-800) )}}.k-browser{container-type:inline-size;font-size:var(--text-sm)}.k-browser-items{display:grid;column-gap:var(--browser-item-gap);row-gap:var(--browser-item-gap);grid-template-columns:repeat(auto-fill,minmax(var(--browser-item-size),1fr))}.k-browser-item{display:flex;overflow:hidden;gap:.5rem;align-items:center;flex-shrink:0;height:var(--browser-item-height);padding-inline:calc(var(--browser-item-padding) + 1px);border-radius:var(--browser-item-rounded);white-space:nowrap;cursor:pointer}.k-browser-item:hover{background:var(--browser-item-hover-color-back);color:var(--browser-item-hover-color-text)}.k-browser-item-image{height:calc(var(--browser-item-height) - var(--browser-item-padding) * 2);aspect-ratio:1/1;border-radius:var(--rounded-sm);box-shadow:var(--shadow);flex-shrink:0}.k-browser-item-image.k-icon-frame{box-shadow:none;--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-black);background:var(--csstools-light-dark-toggle--2, var(--color-white))}@supports (color: light-dark(red,red)){.k-browser-item-image.k-icon-frame{background:light-dark(var(--color-white),var(--color-black))}}.k-browser-item-image svg{transform:scale(.8)}.k-browser-item input{position:absolute;box-shadow:var(--shadow);opacity:0;width:0}.k-browser-item[aria-selected]{background:var(--browser-item-selected-color-back);color:var(--browser-item-selected-color-text)}:root{--button-align: center;--button-height: var(--height-md);--button-width: auto;--button-color-back: none;--button-color-text: currentColor;--button-color-icon: currentColor;--button-padding: var(--spacing-2);--button-rounded: var(--spacing-1);--button-text-display: block;--button-icon-display: block;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--button-filled-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300))}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--button-filled-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-300))}}@supports (color: light-dark(red,red)){:root{--button-filled-color-back: light-dark( var(--color-gray-300), var(--color-gray-950) )}}.k-button{position:relative;display:inline-flex;align-items:center;justify-content:var(--button-align);gap:.5rem;padding-inline:var(--button-padding);white-space:nowrap;line-height:1;border-radius:var(--button-rounded);background:var(--button-color-back);height:var(--button-height);width:var(--button-width);color:var(--button-color-text);font-variant-numeric:tabular-nums;text-align:var(--button-align);flex-shrink:0}.k-button-icon{--icon-color: var(--button-color-icon);flex-shrink:0;display:var(--button-icon-display)}.k-button-text{text-overflow:ellipsis;overflow-x:clip;display:var(--button-text-display);min-width:0}.k-button:where([data-theme]){--button-color-icon: var(--theme-color-icon);--button-color-text: var(--theme-color-text)}.k-button:where([data-theme$=-icon]){--button-color-text: currentColor}.k-button:where([data-variant=dimmed]){--button-color-icon: var(--color-text);--button-color-text: var(--color-text-dimmed)}.k-button:where([data-variant=dimmed]):not([aria-disabled=true]):is(:hover,[aria-current=true]) .k-button-text{--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) brightness(125%);filter:var(--csstools-light-dark-toggle--1, brightness(75%));filter:light-dark(brightness(75%),brightness(125%))}.k-button:where([data-variant=dimmed][data-theme]){--button-color-icon: var(--theme-color-icon);--button-color-text: var(--theme-color-text-dimmed)}.k-button:where([data-variant=dimmed][data-theme$=-icon]){--button-color-text: var(--color-text-dimmed)}.k-button:where([data-variant=filled]){--button-color-back: var(--button-filled-color-back)}.k-button:where([data-variant=filled]):not([aria-disabled=true]):hover{filter:brightness(97%)}.k-button:where([data-variant=filled][data-theme]){--button-color-icon: var(--theme-color-icon-highlight);--button-color-back: var(--theme-color-back);--button-color-text: var(--theme-color-text-highlight)}.k-button:where([data-theme$=-icon][data-variant=filled]){--button-color-icon: var(--theme-color-icon);--button-color-back: var(--button-filled-color-back);--button-color-text: currentColor}.k-button:not([data-has-text=true]){--button-padding: 0;aspect-ratio:1/1}@container (max-width: 30rem){.k-button[data-responsive=true][data-has-icon=true]{--button-padding: 0;aspect-ratio:1/1;--button-text-display: none}.k-button[data-responsive=text][data-has-text=true]{--button-icon-display: none}.k-button[data-responsive=true][data-has-icon=true] .k-button-arrow{display:none}}.k-button:not(button,a,summary,label,.k-link){pointer-events:none}.k-button:where([data-size=xs]){--button-height: var(--height-xs);--button-padding: .325rem}.k-button:where([data-size=sm]){--button-height: var(--height-sm);--button-padding: .5rem}.k-button:where([data-size=lg]){--button-height: var(--height-lg)}.k-button-arrow{width:max-content;margin-inline-start:-.25rem;margin-inline-end:-.125rem}.k-button-badge{position:absolute;top:0;inset-inline-end:0;transform:translate(40%,-20%);min-width:1em;min-height:1em;font-variant-numeric:tabular-nums;line-height:1.5;padding:0 var(--spacing-1);border-radius:1em;text-align:center;font-size:.6rem;box-shadow:var(--shadow-md);background:var(--theme-color-back);--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-black);border:1px solid var(--csstools-light-dark-toggle--2, var(--theme-color-500));color:var(--theme-color-text-highlight);z-index:1}@supports (color: light-dark(red,red)){.k-button-badge{border:1px solid light-dark(var(--theme-color-500),var(--color-black))}}.k-button:where([aria-disabled=true]){cursor:not-allowed}.k-button:where([aria-disabled=true])>*{opacity:var(--opacity-disabled)}.k-button-group{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.k-button-group:where([data-layout=collapsed]){gap:0;flex-wrap:nowrap}.k-button-group[data-layout=collapsed]>.k-button[data-variant=filled]:not(:last-child){border-start-end-radius:0;border-end-end-radius:0}.k-button-group[data-layout=collapsed]>.k-button{--theme-color-border: var(--panel-color-back)}.k-button-group[data-layout=collapsed]>.k-button[data-variant=filled]:not(:first-child){border-start-start-radius:0;border-end-start-radius:0;border-left:1px solid var(--theme-color-border)}.k-button-group[data-layout=collapsed]>.k-button[data-variant=filled]:focus-visible{z-index:1;border-radius:var(--button-rounded)}:root{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--panel-color-back);--file-browser-items-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-100))}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--panel-color-back);--file-browser-items-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-100))}}@supports (color: light-dark(red,red)){:root{--file-browser-items-color-back: light-dark( var(--color-gray-100), var(--panel-color-back) )}}.k-file-browser{container-type:inline-size;overflow:hidden}.k-file-browser-layout{display:grid;grid-template-columns:minmax(10rem,15rem) 1fr;grid-template-rows:1fr auto;grid-template-areas:"tree items" "tree pagination"}.k-file-browser-tree{grid-area:tree;padding:var(--spacing-2);border-right:1px solid var(--color-border)}.k-file-browser-items{grid-area:items;padding:var(--spacing-2);background:var(--file-browser-items-color-back)}.k-file-browser-back-button{display:none}.k-file-browser-pagination{background:var(--file-browser-items-color-back);padding:var(--spacing-2);display:flex;justify-content:end}@container (max-width: 30rem){.k-file-browser-layout{grid-template-columns:minmax(0,1fr);min-height:10rem}.k-file-browser-back-button{width:100%;height:var(--height-sm);display:flex;align-items:center;justify-content:flex-start;padding-inline:.25rem;margin-bottom:.5rem;--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-800);background:var(--csstools-light-dark-toggle--1, var(--color-gray-200));border-radius:var(--rounded)}@supports (color: light-dark(red,red)){.k-file-browser-back-button{background:light-dark(var(--color-gray-200),var(--color-gray-800))}}.k-file-browser-tree{border-right:0}.k-file-browser-pagination{justify-content:start}.k-file-browser[data-view=files] .k-file-browser-layout{grid-template-rows:1fr auto;grid-template-areas:"items" "pagination"}.k-file-browser[data-view=files] .k-file-browser-tree,.k-file-browser[data-view=tree] .k-file-browser-items,.k-file-browser[data-view=tree] .k-file-browser-pagination{display:none}}:root{--tree-color-back: var(--panel-color-back);--tree-indentation: .6rem;--tree-level: 0;--tree-branch-color-back: var(--tree-color-back);--tree-branch-color-text: var(--color-text-dimmed);--tree-branch-hover-color-back: var(--browser-item-hover-color-back);--tree-branch-hover-color-text: var(--browser-item-hover-color-text);--tree-branch-selected-color-back: var(--browser-item-selected-color-back);--tree-branch-selected-color-text: var(--browser-item-selected-color-text)}.k-tree-branch{display:flex;align-items:center;padding-inline-start:calc(var(--tree-level) * var(--tree-indentation));margin-bottom:1px;background:var(--tree-branch-color-back)}.k-tree-branch:has(+.k-tree){inset-block-start:calc(var(--tree-level) * 1.5rem);z-index:calc(100 - var(--tree-level))}.k-tree-branch:hover,li[aria-current=true]>.k-tree-branch{color:var(--tree-branch-hover-color-text);background:var(--tree-branch-hover-color-back);border-radius:var(--rounded)}li[aria-current=true]>.k-tree-branch{background:var(--tree-branch-selected-color-back)}.k-tree-toggle{--icon-size: 12px;width:1rem;aspect-ratio:1/1;display:grid;place-items:center;padding:0;border-radius:var(--rounded-sm);margin-inline-start:.25rem;flex-shrink:0}.k-tree-toggle:hover{background:#00000013}.k-tree-toggle[disabled]{visibility:hidden}.k-tree-folder{display:flex;height:var(--height-sm);border-radius:var(--rounded-sm);padding-inline:.25rem;width:100%;align-items:center;gap:.325rem;min-width:3rem;line-height:1.25;font-size:var(--text-sm)}@container (max-width: 15rem){.k-tree{--tree-indentation: .375rem}.k-tree-folder{padding-inline:.125rem}.k-tree-folder .k-icon{display:none}}.k-tree-folder>.k-frame{flex-shrink:0}.k-tree-folder-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:currentColor}.k-tree-folder[disabled]{opacity:var(--opacity-disabled)}.k-pagination{flex-shrink:0}.k-pagination-details{--button-padding: var(--spacing-3);font-size:var(--text-xs)}.k-pagination-selector{--button-height: var(--height);--dropdown-padding: 0;overflow:visible}.k-pagination-selector form{display:flex;align-items:center;justify-content:space-between}.k-pagination-selector label{display:flex;align-items:center;gap:var(--spacing-2);padding-inline-start:var(--spacing-3)}.k-pagination-selector select{--height: calc(var(--button-height) - .5rem);width:auto;min-width:var(--height);height:var(--height);text-align:center;background:var(--color-gray-800);color:var(--color-white);border-radius:var(--rounded-sm)}.k-prev-next{direction:ltr;flex-shrink:0}.k-search-bar-input{--button-height: var(--input-height);display:flex;align-items:center}.k-search-bar-types{flex-shrink:0;border-inline-end:1px solid var(--color-border)}.k-search-bar-input input{flex-grow:1;padding-inline:.75rem;height:var(--input-height);line-height:var(--input-height);border-radius:var(--rounded);font-size:var(--input-font-size)}.k-search-bar-input input:focus{outline:0}.k-search-bar-input .k-search-bar-close{flex-shrink:0}.k-search-bar-results{border-top:1px solid var(--color-border);padding:1rem}.k-search-bar-results .k-item[data-selected=true]{outline:var(--outline)}.k-search-bar-footer{text-align:center}.k-search-bar-footer p{color:var(--color-text-dimmed)}.k-search-bar-footer .k-button{margin-top:var(--spacing-4)}.k-section+.k-section{margin-top:var(--columns-block-gap)}.k-section-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-6);margin-bottom:var(--spacing-2)}.k-section-buttons{flex-shrink:0}.k-fields-section input[type=submit]{display:none}[data-locked=true] .k-fields-section{opacity:.2;pointer-events:none}.k-models-section[data-processing=true]{pointer-events:none}.k-models-section-search.k-input{--input-color-back: var(--color-border);--input-color-border: transparent;margin-bottom:var(--spacing-3)}:root{--code-color-back: var(--color-black);--code-color-icon: var(--color-gray-500);--code-color-text: var(--color-gray-200, var(--color-white));--code-font-family: var(--font-mono);--code-font-size: 1em;--code-inline-color-back: var(--color-blue-300);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-blue-900);--code-inline-color-border: var(--csstools-light-dark-toggle--0, var(--color-blue-400));--code-inline-color-text: var(--color-blue-900);--code-inline-font-size: .9em;--code-padding: var(--spacing-3)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-blue-900);--code-inline-color-border: var(--csstools-light-dark-toggle--0, var(--color-blue-400))}}@supports (color: light-dark(red,red)){:root{--code-inline-color-border: light-dark(var(--color-blue-400), var(--color-blue-900))}}code{font-family:var(--code-font-family);font-size:var(--code-font-size);font-weight:var(--font-normal)}.k-code,.k-text pre{position:relative;display:block;max-width:100%;padding:var(--code-padding);border-radius:var(--rounded, .5rem);background:var(--code-color-back);color:var(--code-color-text);white-space:nowrap;overflow-y:hidden;overflow-x:auto;line-height:1.5;-moz-tab-size:2;tab-size:2}.k-code:not(code),.k-text pre{white-space:pre-wrap}.k-code:before{position:absolute;content:attr(data-language);inset-block-start:0;inset-inline-end:0;padding:.5rem .5rem .25rem .25rem;font-size:calc(.75 * var(--text-xs));background:var(--code-color-back);border-radius:var(--rounded, .5rem)}.k-text>code,.k-text *:not(pre)>code{display:inline-flex;padding-inline:var(--spacing-1);font-size:var(--code-inline-font-size);color:var(--code-inline-color-text);background:var(--code-inline-color-back);border-radius:var(--rounded);outline:1px solid var(--code-inline-color-border);outline-offset:-1px}:root{--text-h1: 2em;--text-h2: 1.75em;--text-h3: 1.5em;--text-h4: 1.25em;--text-h5: 1.125em;--text-h6: 1em;--font-h1: var(--font-semi);--font-h2: var(--font-semi);--font-h3: var(--font-semi);--font-h4: var(--font-semi);--font-h5: var(--font-semi);--font-h6: var(--font-semi);--leading-h1: 1.125;--leading-h2: 1.125;--leading-h3: 1.25;--leading-h4: 1.375;--leading-h5: 1.5;--leading-h6: 1.5}.k-headline{line-height:1.5em;font-weight:var(--font-bold)}.h1,.k-text h1,.k-headline[data-size=huge]{color:var(--color-h1, var(--color-h));font-family:var(--font-family-h1);font-size:var(--text-h1);font-weight:var(--font-h1);line-height:var(--leading-h1)}.h2,.k-text h2,.k-headline[data-size=large]{color:var(--color-h2, var(--color-h));font-family:var(--font-family-h2);font-size:var(--text-h2);font-weight:var(--font-h2);line-height:var(--leading-h2)}.h3,.k-text h3{color:var(--color-h3, var(--color-h));font-family:var(--font-family-h3);font-size:var(--text-h3);font-weight:var(--font-h3);line-height:var(--leading-h3)}.h4,.k-text h4,.k-headline[data-size=small]{color:var(--color-h4, var(--color-h));font-family:var(--font-family-h4);font-size:var(--text-h4);font-weight:var(--font-h4);line-height:var(--leading-h4)}.h5,.k-text h5{color:var(--color-h5, var(--color-h));font-family:var(--font-family-h5);font-size:var(--text-h5);font-weight:var(--font-h5);line-height:var(--leading-h5)}.h6,.k-text h6{color:var(--color-h6, var(--color-h));font-family:var(--font-family-h6);font-size:var(--text-h6);font-weight:var(--font-h6);line-height:var(--leading-h6)}.k-text>*+h6{margin-block-start:calc(var(--text-line-height) * 1.5em)}.k-label{position:relative;display:flex;align-items:center;height:var(--height-xs);font-weight:var(--font-semi);min-width:0;flex:1}[aria-disabled=true] .k-label{opacity:var(--opacity-disabled);cursor:not-allowed}.k-label>a{display:inline-flex;height:var(--height-xs);align-items:center;padding-inline:var(--spacing-2);margin-inline-start:calc(-1 * var(--spacing-2));border-radius:var(--rounded);min-width:0}.k-label-text{text-overflow:ellipsis;white-space:nowrap;overflow-x:clip;min-width:0}.k-label abbr{font-size:var(--text-xs);color:var(--color-gray-500);margin-inline-start:var(--spacing-1)}.k-label abbr.k-label-invalid{display:none;color:var(--theme-color-text)}:where(.k-field:has(:invalid),.k-section:has([data-invalid=true]))>header>.k-label abbr.k-label-invalid{display:inline-block}.k-field:has(:invalid)>.k-field-header>.k-label abbr:has(+abbr.k-label-invalid){display:none}:root{--text-font-size: 1em;--text-line-height: 1.5;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-blue-500);--link-color: var(--csstools-light-dark-toggle--0, var(--color-blue-800));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-blue-400);--link-color-hover: var(--csstools-light-dark-toggle--1, var(--color-blue-700));--link-underline-offset: 2px}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-blue-500);--link-color: var(--csstools-light-dark-toggle--0, var(--color-blue-800));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-blue-400);--link-color-hover: var(--csstools-light-dark-toggle--1, var(--color-blue-700))}}@supports (color: light-dark(red,red)){:root{--link-color: light-dark(var(--color-blue-800), var(--color-blue-500));--link-color-hover: light-dark(var(--color-blue-700), var(--color-blue-400))}}.k-text{font-size:var(--text-font-size);line-height:var(--text-line-height)}.k-text[data-size=tiny]{--text-font-size: var(--text-xs)}.k-text[data-size=small]{--text-font-size: var(--text-sm)}.k-text[data-size=medium]{--text-font-size: var(--text-md)}.k-text[data-size=large]{--text-font-size: var(--text-xl)}.k-text[data-align]{text-align:var(--align)}.k-text>:where(audio,blockquote,details,div,figure,h1,h2,h3,h4,h5,h6,hr,iframe,img,object,ol,p,picture,pre,table,ul)+*{margin-block-start:calc(var(--text-line-height) * 1em)}.k-text :where(.k-link,a){color:var(--link-color);text-decoration:underline;text-underline-offset:var(--link-underline-offset);border-radius:var(--rounded-xs);outline-offset:2px}.k-text :where(.k-link,a):hover{color:var(--link-color-hover)}.k-text ol,.k-text ul{padding-inline-start:1.75em}.k-text ol{list-style:numeric}.k-text ol>li{list-style:decimal}.k-text ul>li{list-style:disc}.k-text ul ul>li{list-style:circle}.k-text ul ul ul>li{list-style:square}.k-text blockquote{font-size:var(--text-lg);line-height:1.25;padding-inline-start:var(--spacing-4);--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-border);border-inline-start:2px solid var(--csstools-light-dark-toggle--2, var(--color-black))}@supports (color: light-dark(red,red)){.k-text blockquote{border-inline-start:2px solid light-dark(var(--color-black),var(--color-border))}}.k-text img{border-radius:var(--rounded)}.k-text iframe{width:100%;aspect-ratio:16/9;border-radius:var(--rounded)}.k-text hr{background:var(--color-border);height:1px}.k-help{color:var(--color-text-dimmed)}.k-upload-item-preview{--icon-size: 24px;grid-area:preview;display:flex;aspect-ratio:1/1;width:100%;height:100%;overflow:hidden;border-start-start-radius:var(--rounded);border-end-start-radius:var(--rounded)}.k-upload-item-preview:focus{border-radius:var(--rounded);outline:2px solid var(--color-focus);z-index:1}:root{--upload-item-color-back: var(--item-color-back)}.k-upload-item{accent-color:var(--color-focus);display:grid;grid-template-areas:"preview input input" "preview body toggle";grid-template-columns:6rem 1fr auto;grid-template-rows:var(--input-height) 1fr;border-radius:var(--rounded);background:var(--upload-item-color-back);box-shadow:var(--shadow);min-height:6rem}.k-upload-item-body{grid-area:body;display:flex;flex-direction:column;justify-content:space-between;padding:var(--spacing-2) var(--spacing-3);min-width:0}.k-upload-item-input.k-input{--input-color-border: transparent;--input-padding: var(--spacing-2) var(--spacing-3);--input-rounded: 0;grid-area:input;font-size:var(--text-sm);border-bottom:1px solid var(--color-border);border-start-end-radius:var(--rounded)}.k-upload-item-input.k-input:focus-within{outline:2px solid var(--color-focus);z-index:1;border-radius:var(--rounded)}.k-upload-item-input.k-input[data-disabled=true]{--input-color-back: var(--upload-item-color-back)}.k-upload-item-input .k-input-after{color:var(--color-gray-600)}.k-upload-item-meta{font-size:var(--text-xs);color:var(--color-gray-600)}.k-upload-item-error{font-size:var(--text-xs);margin-top:.25rem;color:var(--theme-color-text)}.k-upload-item-progress{--progress-height: .25rem;--progress-color-back: var(--panel-color-back);margin-bottom:.3125rem}.k-upload-item-toggle{grid-area:toggle;align-self:end}.k-upload-item-toggle>*{padding:var(--spacing-3)}.k-upload-items{display:grid;gap:.25rem}.k-activation{position:relative;display:flex;color:var(--dropdown-color-text);background:var(--dropdown-color-bg);border-radius:var(--dropdown-rounded);box-shadow:var(--dropdown-shadow);justify-content:space-between}.k-activation p{padding-inline-start:var(--spacing-3);padding-inline-end:var(--spacing-2);padding-block:.425rem;line-height:1.25}.k-activation p strong{font-weight:var(--font-normal);margin-inline-end:var(--spacing-1)}.k-activation p :where(button,a){color:var(--color-pink-400);text-decoration:underline;text-decoration-color:currentColor;text-underline-offset:2px;border-radius:var(--rounded-sm)}.k-activation-toggle{--button-color-text: var(--color-gray-400);--button-rounded: 0;border-left:1px solid var(--dropdown-color-hr)}.k-activation-toggle:is(:hover,:focus){--button-color-text: var(--color-white)}.k-activation-toggle:focus{--button-rounded: var(--rounded)}.k-languages-dropdown-item:after{content:"✓";padding-inline-start:var(--spacing-1)}.k-languages-dropdown-item:not([aria-current=true]):after{visibility:hidden}.k-languages-dropdown-item .k-button-text{display:flex;flex-grow:1;justify-content:space-between;align-items:center;gap:var(--spacing-6);min-width:8rem}.k-languages-dropdown-item-info{display:flex;gap:var(--spacing-2);align-items:center}.k-languages-dropdown-item-icon{--icon-color: var(--color-orange-500);--icon-size: 1rem}.k-languages-dropdown-item-info[data-lock=true] .k-languages-dropdown-item-icon{--icon-color: var(--color-red-500)}.k-languages-dropdown-item-code{font-size:var(--text-xs);color:var(--color-gray-500)}:root{--main-padding-inline: clamp(var(--spacing-6), 5cqw, var(--spacing-24))}.k-panel-main{min-height:100vh;min-height:100dvh;padding:var(--spacing-3) var(--main-padding-inline) var(--spacing-24);container:main / inline-size;margin-inline-start:var(--main-start)}.k-panel-notification{--button-height: var(--height-md);--button-color-icon: var(--theme-color-900);--button-color-text: var(--theme-color-900);border:1px solid var(--theme-color-500);position:fixed;inset-block-end:var(--menu-padding);inset-inline-end:var(--menu-padding);box-shadow:var(--dropdown-shadow);z-index:var(--z-notification)}:root{--menu-button-height: var(--height);--menu-button-width: 100%;--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--menu-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-250));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-850);--menu-color-border: var(--csstools-light-dark-toggle--1, var(--color-gray-300));--menu-display: none;--menu-display-backdrop: block;--menu-padding: var(--spacing-3);--menu-shadow: var(--shadow-xl);--menu-toggle-height: var(--menu-button-height);--menu-toggle-width: 1rem;--menu-width-closed: calc( var(--menu-button-height) + 2 * var(--menu-padding) );--menu-width-open: 12rem;--menu-width: var(--menu-width-open)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--menu-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-250));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-850);--menu-color-border: var(--csstools-light-dark-toggle--1, var(--color-gray-300))}}@supports (color: light-dark(red,red)){:root{--menu-color-back: light-dark(var(--color-gray-250), var(--color-gray-950));--menu-color-border: light-dark(var(--color-gray-300), var(--color-gray-850))}}.k-panel-menu{position:fixed;inset-inline-start:0;inset-block:0;z-index:var(--z-navigation);display:var(--menu-display);width:var(--menu-width);background-color:var(--menu-color-back);border-right:1px solid var(--menu-color-border);box-shadow:var(--menu-shadow)}.k-panel-menu-body{display:flex;flex-direction:column;gap:var(--spacing-4);padding:var(--menu-padding);overscroll-behavior:contain;overflow-x:hidden;overflow-y:auto;height:100%}.k-panel-menu-search{margin-bottom:var(--spacing-8)}.k-panel-menu-buttons{display:flex;flex-direction:column;width:100%}.k-panel-menu-buttons[data-second-last=true]{margin-bottom:auto}.k-panel-menu-button{--button-align: flex-start;--button-height: var(--menu-button-height);--button-width: var(--menu-button-width);--button-padding: 7px;flex-shrink:0}.k-panel-menu-button[aria-current=true]{--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-850);--button-color-back: var(--csstools-light-dark-toggle--2, var(--color-white));box-shadow:var(--shadow)}@supports not (color: light-dark(tan,tan)){.k-panel-menu-button[aria-current=true] *{--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-850);--button-color-back: var(--csstools-light-dark-toggle--2, var(--color-white))}}@supports (color: light-dark(red,red)){.k-panel-menu-button[aria-current=true]{--button-color-back: light-dark(var(--color-white), var(--color-gray-850))}}.k-panel-menu-button:focus{z-index:1}.k-panel[data-menu=true]{--menu-button-width: 100%;--menu-display: block;--menu-width: var(--menu-width-open)}.k-panel[data-menu=true]:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay-color-back);display:var(--menu-display-backdrop);pointer-events:none;z-index:var(--z-drawer)}.k-panel-menu-toggle{--button-align: flex-start;--button-height: 100%;--button-width: var(--menu-toggle-width);position:absolute;inset-block:0;inset-inline-start:100%;align-items:flex-start;border-radius:0;overflow:visible;opacity:0;transition:opacity .2s}.k-panel-menu-toggle:focus{outline:0}.k-panel-menu-toggle .k-button-icon{display:grid;place-items:center;height:var(--menu-toggle-height);width:var(--menu-toggle-width);margin-top:var(--menu-padding);border-block:1px solid var(--menu-color-border);border-inline-end:1px solid var(--menu-color-border);background:var(--menu-color-back);border-start-end-radius:var(--button-rounded);border-end-end-radius:var(--button-rounded)}@media (max-width: 60rem){.k-panel-menu .k-activation-button{margin-bottom:var(--spacing-3)}.k-panel-menu .k-activation-toggle{display:none}}@media (min-width: 60rem){.k-panel{--menu-display: block;--menu-display-backdrop: none;--menu-shadow: none;--main-start: var(--menu-width)}.k-panel[data-menu=false]{--menu-button-width: var(--menu-button-height);--menu-width: var(--menu-width-closed)}.k-panel-menu-proxy{display:none}.k-panel-menu-toggle:focus-visible,.k-panel-menu[data-hover=true] .k-panel-menu-toggle{opacity:1}.k-panel-menu-toggle:focus-visible .k-button-icon{outline:var(--outline);border-radius:var(--button-rounded)}.k-panel-menu-search[aria-disabled=true]{opacity:0}.k-panel-menu .k-activation{position:absolute;bottom:var(--menu-padding);inset-inline-start:100%;height:var(--height-md);width:max-content;margin-left:var(--menu-padding)}.k-panel-menu .k-activation:before{position:absolute;content:"";top:50%;left:-4px;margin-top:-4px;border-top:4px solid transparent;border-right:4px solid var(--color-black);border-bottom:4px solid transparent}.k-panel-menu .k-activation p :where(button,a){padding-inline:var(--spacing-1)}.k-panel-menu .k-activation-toggle{border-left:1px solid var(--dropdown-color-hr)}}.k-panel.k-panel-outside{display:grid;grid-template-rows:1fr;place-items:center;min-height:100vh;min-height:100dvh;padding:var(--spacing-6)}:root{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-900);--panel-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-200));--scroll-top: 0rem}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-900);--panel-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-200))}}@supports (color: light-dark(red,red)){:root{--panel-color-back: light-dark(var(--color-gray-200), var(--color-gray-900))}}html{overflow-x:hidden;overflow-y:scroll;background:var(--panel-color-back);color:var(--color-text)}body{font-size:var(--text-sm);color:var(--color-text)}.k-panel[data-loading=true]{animation:LoadingCursor .5s}.k-panel[data-loading=true]:after,.k-panel[data-dragging=true]{-webkit-user-select:none;user-select:none}.k-topbar{position:relative;margin-inline:calc(var(--button-padding) * -1);margin-bottom:var(--spacing-8);display:flex;align-items:center;gap:var(--spacing-1)}.k-topbar-breadcrumb{margin-inline-start:-2px;flex-shrink:1;min-width:0}.k-topbar-spacer{flex-grow:1}.k-topbar-signals{display:flex;align-items:center}.k-header+.k-search-view-results{margin-top:var(--spacing-12)}.k-search-view-input{--input-color-back: var(--color-border);--input-color-border: transparent;--input-height: var(--height-md);width:40cqw}.k-file-view-header{margin-bottom:0;border-bottom:0}:root{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--file-preview-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-900));--file-preview-color-text: var(--color-gray-200)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--file-preview-color-back: var(--csstools-light-dark-toggle--0, var(--color-gray-900))}}@supports (color: light-dark(red,red)){:root{--file-preview-color-back: light-dark( var(--color-gray-900), var(--color-gray-950) )}}.k-file-preview{display:grid;align-items:stretch;background:var(--file-preview-color-back);border-radius:var(--rounded-lg);margin-bottom:var(--spacing-12);overflow:hidden}.k-file-preview:has(+.k-tabs){margin-bottom:0}.k-file-preview-details{display:grid}.k-file-preview-details dl{display:grid;grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));grid-gap:var(--spacing-6) var(--spacing-12);align-self:center;padding:var(--spacing-6);line-height:1.5em}.k-file-preview-details dt{font-size:var(--text-sm);font-weight:var(--font-semi);color:var(--color-gray-500);margin-bottom:var(--spacing-1)}.k-file-preview-details :where(dd,a){white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--file-preview-color-text);font-size:var(--text-sm)}.k-file-preview-frame-column{aspect-ratio:1/1;background:var(--pattern)}.k-file-preview-frame{position:relative;display:flex;align-items:center;justify-content:center;height:100%;padding:var(--spacing-10);container-type:size}.k-file-preview-frame :where(img,audio,video){width:auto;max-width:100cqw;max-height:100cqh}.k-file-preview-frame>.k-button{position:absolute;top:var(--spacing-2);inset-inline-start:var(--spacing-2)}.k-button.k-file-preview-frame-dropdown-toggle{--button-color-icon: var(--color-gray-500)}@container (min-width: 36rem) and (max-width: 65rem){.k-file-preview-frame-column{aspect-ratio:auto}}.k-default-file-preview .k-file-preview-frame .k-item-icon{--icon-size: 3rem}@container (min-width: 36rem){.k-default-file-preview{grid-template-columns:50% auto}.k-default-file-preview-thumb-column{aspect-ratio:auto}}@container (min-width: 65rem){.k-default-file-preview{grid-template-columns:33.333% auto}.k-default-file-preview-thumb-column{aspect-ratio:1/1}}.k-audio-file-preview{display:block}.k-audio-file-preview audio{width:100%}.k-audio-file-preview audio::-webkit-media-controls-enclosure{border-radius:0}.k-image-file-preview .k-coords-input{--opacity-disabled: 1;--range-thumb-color: hsl(216 60% 60% / .75);--range-thumb-size: 1.25rem;--range-thumb-shadow: none;cursor:crosshair}.k-image-file-preview .k-coords-input-thumb:after{--size: .4rem;--pos: calc(50% - (var(--size) / 2));position:absolute;top:var(--pos);inset-inline-start:var(--pos);width:var(--size);height:var(--size);content:"";background:#fff;border-radius:50%}.k-image-file-preview:not([data-has-focus=true]) .k-coords-input-thumb{display:none}.k-image-file-preview-focus dd{display:flex;align-items:center}.k-image-file-preview-focus .k-button{--button-padding: var(--spacing-2);--button-color-back: var(--color-gray-800)}.k-pdf-file-preview[data-supported=true]{grid-template-columns:1fr}.k-pdf-file-preview .k-pdf-file-preview-object{width:100%}.k-pdf-file-preview[data-supported=true] .k-pdf-file-preview-object{aspect-ratio:1/1;border-bottom:1px solid var(--color-gray-850)}@container (min-width: 36rem){.k-pdf-file-preview[data-supported=true] .k-pdf-file-preview-object{aspect-ratio:3/2}}@container (min-width: 60rem){.k-pdf-file-preview[data-supported=true]{grid-template-columns:70% auto}.k-pdf-file-preview[data-supported=true] .k-pdf-file-preview-object{aspect-ratio:5/3;border-bottom:0;border-right:1px solid var(--color-gray-850)}}.k-video-file-preview .k-file-preview-frame-column{aspect-ratio:16/9}@container (min-width: 60rem){.k-video-file-preview{grid-template-columns:50% auto}}.k-installation-dialog{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--dialog-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) none;--dialog-shadow: var(--csstools-light-dark-toggle--1, var(--shadow));container-type:inline-size}@supports not (color: light-dark(tan,tan)){.k-installation-dialog *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--dialog-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) none;--dialog-shadow: var(--csstools-light-dark-toggle--1, var(--shadow))}}@supports (color: light-dark(red,red)){.k-installation-dialog{--dialog-color-back: light-dark(var(--color-white), var(--color-gray-950));--dialog-shadow: light-dark(var(--shadow), none)}}.k-installation-view .k-button{margin-top:var(--spacing-3);width:100%}.k-installation-view form .k-button{margin-top:var(--spacing-10)}.k-installation-view .k-headline{font-weight:var(--font-semi);margin-top:-.5rem;margin-bottom:.75rem}.k-installation-issues{line-height:1.5em;font-size:var(--text-sm)}.k-installation-issues li{position:relative;padding:var(--spacing-6);background:var(--color-red-300);padding-inline-start:3.5rem;border-radius:var(--rounded)}.k-installation-issues .k-icon{position:absolute;top:calc(1.5rem + 2px);inset-inline-start:1.5rem}.k-installation-issues .k-icon{color:var(--color-red-700)}.k-installation-issues li:not(:last-child){margin-bottom:2px}.k-installation-issues li code{font:inherit;color:var(--color-red-700)}.k-login-code-form .k-user-info{margin-bottom:var(--spacing-6)}.k-login-form{position:relative}.k-login-form label abbr{visibility:hidden}.k-login-toggler{position:absolute;top:-2px;inset-inline-end:calc(var(--spacing-2) * -1);color:var(--link-color);text-decoration:underline;text-decoration-color:var(--link-color);text-underline-offset:1px;height:var(--height-xs);line-height:1;padding-inline:var(--spacing-2);border-radius:var(--rounded);z-index:1}.k-login{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--dialog-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) none;--dialog-shadow: var(--csstools-light-dark-toggle--1, var(--shadow));container-type:inline-size}@supports not (color: light-dark(tan,tan)){.k-login *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-950);--dialog-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) none;--dialog-shadow: var(--csstools-light-dark-toggle--1, var(--shadow))}}@supports (color: light-dark(red,red)){.k-login{--dialog-color-back: light-dark(var(--color-white), var(--color-gray-950));--dialog-shadow: light-dark(var(--shadow), none)}}.k-login-buttons{--button-padding: var(--spacing-3);display:flex;gap:1.5rem;align-items:center;justify-content:space-between;margin-top:var(--spacing-10)}.k-page-view[data-has-tabs=true] .k-page-view-header,.k-site-view[data-has-tabs=true] .k-site-view-header{margin-bottom:0}:root{--preview-browser-color-background: var(--input-color-back)}.k-preview-browser{container-type:inline-size;display:flex;flex-direction:column;border-radius:var(--rounded-lg);box-shadow:var(--shadow-xl);background:var(--preview-browser-color-background);overflow:hidden;border:1px solid var(--color-border)}.k-preview-browser-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-6);background:var(--preview-browser-color-background);border-bottom:1px solid var(--color-border);color:var(--color-text);padding-inline:var(--spacing-2);height:var(--input-height)}.k-preview-browser header .k-headline{display:flex;align-items:center;gap:var(--spacing-1);font-weight:var(--font-normal);font-size:var(--text-xs);padding-inline:var(--spacing-1)}.k-preview-browser-header .k-form-controls-button{font-size:var(--text-xs);--button-rounded: 3px;--icon-size: 1rem}.k-preview-browser-message{font-size:var(--text-xs);display:flex;margin-inline-end:var(--spacing-1);color:var(--color-text-dimmed)}.k-preview-browser iframe{width:100%;flex-grow:1}@container (max-width: 30rem){.k-preview-browser-message{display:none}}.k-preview-view{position:fixed;top:0;right:0;bottom:0;left:0;height:100%;display:grid;grid-template-rows:auto 1fr}.k-preview-view-header{container-type:inline-size;display:flex;gap:var(--spacing-2);justify-content:space-between;align-items:center;padding:var(--spacing-3)}.k-preview-view-grid{display:flex;justify-content:center;padding:var(--spacing-3);padding-top:0;gap:var(--spacing-3)}@media screen and (max-width: 60rem){.k-preview-view-grid{flex-direction:column}.k-preview-view-title{display:none}}.k-preview-view .k-preview-browser{flex-grow:1;flex-basis:50%}.k-user-name-placeholder{color:var(--color-gray-500);transition:color .3s}.k-user-view-header[data-editable=true] .k-user-name-placeholder:hover{color:var(--color-gray-900)}.k-user-view-header{margin-bottom:0;border-bottom:0}.k-user-view .k-user-profile{margin-bottom:var(--spacing-12)}.k-user-view[data-has-tabs=true] .k-user-profile{margin-bottom:0}.k-password-reset-view .k-user-info{margin-bottom:var(--spacing-8)}.k-user-view-image{padding:0}.k-user-view-image .k-frame{width:6rem;height:6rem;border-radius:var(--rounded);line-height:0}.k-user-view-image .k-icon-frame{--back: var(--color-black);--icon-color: var(--color-gray-200)}.k-user-info{display:flex;align-items:center;font-size:var(--text-sm);height:var(--height-lg);gap:.75rem;padding-inline:var(--spacing-2);background:var(--item-color-back);box-shadow:var(--shadow)}.k-user-info :where(.k-image-frame,.k-icon-frame){width:1.5rem;border-radius:var(--rounded-sm)}.k-user-profile{--button-height: auto;padding:var(--spacing-2);background:var(--item-color-back);border-radius:var(--rounded-lg);display:flex;align-items:center;gap:var(--spacing-3);box-shadow:var(--shadow)}.k-user-profile .k-button-group{display:flex;flex-direction:column;align-items:flex-start}.k-users-view-header{margin-bottom:0}.k-system-info .k-stat-label{color:var(--theme-color-text, currentColor)}.k-table-license-status-cell{padding:0 var(--spacing-1)}.k-table-update-status-cell{padding:0 .75rem;display:flex;align-items:center;height:100%}.k-table-update-status-cell-version,.k-table-update-status-cell-button{font-variant-numeric:tabular-nums}.k-plugin-info{display:grid;column-gap:var(--spacing-3);row-gap:2px;padding:var(--button-padding)}.k-plugin-info dt{color:var(--color-gray-400)}.k-plugin-info dd[data-theme]{color:var(--theme-color-600)}@container (max-width: 30em){.k-plugin-info dd:not(:last-of-type){margin-bottom:var(--spacing-2)}}@container (min-width: 30em){.k-plugin-info{width:20rem;grid-template-columns:1fr auto}}:root{--color-l-100: 98%;--color-l-150: 96%;--color-l-200: 94%;--color-l-250: 91%;--color-l-300: 88%;--color-l-350: 84%;--color-l-400: 80%;--color-l-450: 75%;--color-l-500: 70%;--color-l-550: 65%;--color-l-600: 60%;--color-l-650: 52%;--color-l-700: 45%;--color-l-750: 40%;--color-l-800: 30%;--color-l-850: 21%;--color-l-900: 15%;--color-l-950: 11%;--color-red-h: 0;--color-red-s: 80%;--color-red-hs: var(--color-red-h), var(--color-red-s);--color-red-boost: 3%;--color-red-l-100: calc(var(--color-l-100) + var(--color-red-boost));--color-red-l-150: calc(var(--color-l-150) + var(--color-red-boost));--color-red-l-200: calc(var(--color-l-200) + var(--color-red-boost));--color-red-l-250: calc(var(--color-l-250) + var(--color-red-boost));--color-red-l-300: calc(var(--color-l-300) + var(--color-red-boost));--color-red-l-350: calc(var(--color-l-350) + var(--color-red-boost));--color-red-l-400: calc(var(--color-l-400) + var(--color-red-boost));--color-red-l-450: calc(var(--color-l-450) + var(--color-red-boost));--color-red-l-500: calc(var(--color-l-500) + var(--color-red-boost));--color-red-l-550: calc(var(--color-l-550) + var(--color-red-boost));--color-red-l-600: calc(var(--color-l-600) + var(--color-red-boost));--color-red-l-650: calc(var(--color-l-650) + var(--color-red-boost));--color-red-l-700: calc(var(--color-l-700) + var(--color-red-boost));--color-red-l-750: calc(var(--color-l-750) + var(--color-red-boost));--color-red-l-800: calc(var(--color-l-800) + var(--color-red-boost));--color-red-l-850: calc(var(--color-l-850) + var(--color-red-boost));--color-red-l-900: calc(var(--color-l-900) + var(--color-red-boost));--color-red-l-950: calc(var(--color-l-950) + var(--color-red-boost));--color-red-100: hsl(var(--color-red-hs), var(--color-red-l-100));--color-red-150: hsl(var(--color-red-hs), var(--color-red-l-150));--color-red-200: hsl(var(--color-red-hs), var(--color-red-l-200));--color-red-250: hsl(var(--color-red-hs), var(--color-red-l-250));--color-red-300: hsl(var(--color-red-hs), var(--color-red-l-300));--color-red-350: hsl(var(--color-red-hs), var(--color-red-l-350));--color-red-400: hsl(var(--color-red-hs), var(--color-red-l-400));--color-red-450: hsl(var(--color-red-hs), var(--color-red-l-450));--color-red-500: hsl(var(--color-red-hs), var(--color-red-l-500));--color-red-550: hsl(var(--color-red-hs), var(--color-red-l-550));--color-red-600: hsl(var(--color-red-hs), var(--color-red-l-600));--color-red-650: hsl(var(--color-red-hs), var(--color-red-l-650));--color-red-700: hsl(var(--color-red-hs), var(--color-red-l-700));--color-red-750: hsl(var(--color-red-hs), var(--color-red-l-750));--color-red-800: hsl(var(--color-red-hs), var(--color-red-l-800));--color-red-850: hsl(var(--color-red-hs), var(--color-red-l-850));--color-red-900: hsl(var(--color-red-hs), var(--color-red-l-900));--color-red-950: hsl(var(--color-red-hs), var(--color-red-l-950));--color-orange-h: 28;--color-orange-s: 80%;--color-orange-hs: var(--color-orange-h), var(--color-orange-s);--color-orange-boost: 2%;--color-orange-l-100: calc(var(--color-l-100) + var(--color-orange-boost));--color-orange-l-150: calc(var(--color-l-150) + var(--color-orange-boost));--color-orange-l-200: calc(var(--color-l-200) + var(--color-orange-boost));--color-orange-l-250: calc(var(--color-l-250) + var(--color-orange-boost));--color-orange-l-300: calc(var(--color-l-300) + var(--color-orange-boost));--color-orange-l-350: calc(var(--color-l-350) + var(--color-orange-boost));--color-orange-l-400: calc(var(--color-l-400) + var(--color-orange-boost));--color-orange-l-450: calc(var(--color-l-450) + var(--color-orange-boost));--color-orange-l-500: calc(var(--color-l-500) + var(--color-orange-boost));--color-orange-l-550: calc(var(--color-l-550) + var(--color-orange-boost));--color-orange-l-600: calc(var(--color-l-600) + var(--color-orange-boost));--color-orange-l-650: calc(var(--color-l-650) + var(--color-orange-boost));--color-orange-l-700: calc(var(--color-l-700) + var(--color-orange-boost));--color-orange-l-750: calc(var(--color-l-750) + var(--color-orange-boost));--color-orange-l-800: calc(var(--color-l-800) + var(--color-orange-boost));--color-orange-l-850: calc(var(--color-l-850) + var(--color-orange-boost));--color-orange-l-900: calc(var(--color-l-900) + var(--color-orange-boost));--color-orange-l-950: calc(var(--color-l-950) + var(--color-orange-boost));--color-orange-100: hsl(var(--color-orange-hs), var(--color-orange-l-100));--color-orange-150: hsl(var(--color-orange-hs), var(--color-orange-l-150));--color-orange-200: hsl(var(--color-orange-hs), var(--color-orange-l-200));--color-orange-250: hsl(var(--color-orange-hs), var(--color-orange-l-250));--color-orange-300: hsl(var(--color-orange-hs), var(--color-orange-l-300));--color-orange-350: hsl(var(--color-orange-hs), var(--color-orange-l-350));--color-orange-400: hsl(var(--color-orange-hs), var(--color-orange-l-400));--color-orange-450: hsl(var(--color-orange-hs), var(--color-orange-l-450));--color-orange-500: hsl(var(--color-orange-hs), var(--color-orange-l-500));--color-orange-550: hsl(var(--color-orange-hs), var(--color-orange-l-550));--color-orange-600: hsl(var(--color-orange-hs), var(--color-orange-l-600));--color-orange-650: hsl(var(--color-orange-hs), var(--color-orange-l-650));--color-orange-700: hsl(var(--color-orange-hs), var(--color-orange-l-700));--color-orange-750: hsl(var(--color-orange-hs), var(--color-orange-l-750));--color-orange-800: hsl(var(--color-orange-hs), var(--color-orange-l-800));--color-orange-850: hsl(var(--color-orange-hs), var(--color-orange-l-850));--color-orange-900: hsl(var(--color-orange-hs), var(--color-orange-l-900));--color-orange-950: hsl(var(--color-orange-hs), var(--color-orange-l-950));--color-yellow-h: 47;--color-yellow-s: 80%;--color-yellow-hs: var(--color-yellow-h), var(--color-yellow-s);--color-yellow-boost: -4%;--color-yellow-l-100: calc(var(--color-l-100) + var(--color-yellow-boost));--color-yellow-l-150: calc(var(--color-l-150) + var(--color-yellow-boost));--color-yellow-l-200: calc(var(--color-l-200) + var(--color-yellow-boost));--color-yellow-l-250: calc(var(--color-l-250) + var(--color-yellow-boost));--color-yellow-l-300: calc(var(--color-l-300) + var(--color-yellow-boost));--color-yellow-l-350: calc(var(--color-l-350) + var(--color-yellow-boost));--color-yellow-l-400: calc(var(--color-l-400) + var(--color-yellow-boost));--color-yellow-l-450: calc(var(--color-l-450) + var(--color-yellow-boost));--color-yellow-l-500: calc(var(--color-l-500) + var(--color-yellow-boost));--color-yellow-l-550: calc(var(--color-l-550) + var(--color-yellow-boost));--color-yellow-l-600: calc(var(--color-l-600) + var(--color-yellow-boost));--color-yellow-l-650: calc(var(--color-l-650) + var(--color-yellow-boost));--color-yellow-l-700: calc(var(--color-l-700) + var(--color-yellow-boost));--color-yellow-l-750: calc(var(--color-l-750) + var(--color-yellow-boost));--color-yellow-l-800: calc(var(--color-l-800) + var(--color-yellow-boost));--color-yellow-l-850: calc(var(--color-l-850) + var(--color-yellow-boost));--color-yellow-l-900: calc(var(--color-l-900) + var(--color-yellow-boost));--color-yellow-l-950: calc(var(--color-l-950) + var(--color-yellow-boost));--color-yellow-100: hsl(var(--color-yellow-hs), var(--color-yellow-l-100));--color-yellow-150: hsl(var(--color-yellow-hs), var(--color-yellow-l-150));--color-yellow-200: hsl(var(--color-yellow-hs), var(--color-yellow-l-200));--color-yellow-250: hsl(var(--color-yellow-hs), var(--color-yellow-l-250));--color-yellow-300: hsl(var(--color-yellow-hs), var(--color-yellow-l-300));--color-yellow-350: hsl(var(--color-yellow-hs), var(--color-yellow-l-350));--color-yellow-400: hsl(var(--color-yellow-hs), var(--color-yellow-l-400));--color-yellow-450: hsl(var(--color-yellow-hs), var(--color-yellow-l-450));--color-yellow-500: hsl(var(--color-yellow-hs), var(--color-yellow-l-500));--color-yellow-550: hsl(var(--color-yellow-hs), var(--color-yellow-l-550));--color-yellow-600: hsl(var(--color-yellow-hs), var(--color-yellow-l-600));--color-yellow-650: hsl(var(--color-yellow-hs), var(--color-yellow-l-650));--color-yellow-700: hsl(var(--color-yellow-hs), var(--color-yellow-l-700));--color-yellow-750: hsl(var(--color-yellow-hs), var(--color-yellow-l-750));--color-yellow-800: hsl(var(--color-yellow-hs), var(--color-yellow-l-800));--color-yellow-850: hsl(var(--color-yellow-hs), var(--color-yellow-l-850));--color-yellow-900: hsl(var(--color-yellow-hs), var(--color-yellow-l-900));--color-yellow-950: hsl(var(--color-yellow-hs), var(--color-yellow-l-950));--color-green-h: 80;--color-green-s: 60%;--color-green-hs: var(--color-green-h), var(--color-green-s);--color-green-boost: -8%;--color-green-l-100: calc(var(--color-l-100) + var(--color-green-boost));--color-green-l-150: calc(var(--color-l-150) + var(--color-green-boost));--color-green-l-200: calc(var(--color-l-200) + var(--color-green-boost));--color-green-l-250: calc(var(--color-l-250) + var(--color-green-boost));--color-green-l-300: calc(var(--color-l-300) + var(--color-green-boost));--color-green-l-350: calc(var(--color-l-350) + var(--color-green-boost));--color-green-l-400: calc(var(--color-l-400) + var(--color-green-boost));--color-green-l-450: calc(var(--color-l-450) + var(--color-green-boost));--color-green-l-500: calc(var(--color-l-500) + var(--color-green-boost));--color-green-l-550: calc(var(--color-l-550) + var(--color-green-boost));--color-green-l-600: calc(var(--color-l-600) + var(--color-green-boost));--color-green-l-650: calc(var(--color-l-650) + var(--color-green-boost));--color-green-l-700: calc(var(--color-l-700) + var(--color-green-boost));--color-green-l-750: calc(var(--color-l-750) + var(--color-green-boost));--color-green-l-800: calc(var(--color-l-800) + var(--color-green-boost));--color-green-l-850: calc(var(--color-l-850) + var(--color-green-boost));--color-green-l-900: calc(var(--color-l-900) + var(--color-green-boost));--color-green-l-950: calc(var(--color-l-950) + var(--color-green-boost));--color-green-100: hsl(var(--color-green-hs), var(--color-green-l-100));--color-green-150: hsl(var(--color-green-hs), var(--color-green-l-150));--color-green-200: hsl(var(--color-green-hs), var(--color-green-l-200));--color-green-250: hsl(var(--color-green-hs), var(--color-green-l-250));--color-green-300: hsl(var(--color-green-hs), var(--color-green-l-300));--color-green-350: hsl(var(--color-green-hs), var(--color-green-l-350));--color-green-400: hsl(var(--color-green-hs), var(--color-green-l-400));--color-green-450: hsl(var(--color-green-hs), var(--color-green-l-450));--color-green-500: hsl(var(--color-green-hs), var(--color-green-l-500));--color-green-550: hsl(var(--color-green-hs), var(--color-green-l-550));--color-green-600: hsl(var(--color-green-hs), var(--color-green-l-600));--color-green-650: hsl(var(--color-green-hs), var(--color-green-l-650));--color-green-700: hsl(var(--color-green-hs), var(--color-green-l-700));--color-green-750: hsl(var(--color-green-hs), var(--color-green-l-750));--color-green-800: hsl(var(--color-green-hs), var(--color-green-l-800));--color-green-850: hsl(var(--color-green-hs), var(--color-green-l-850));--color-green-900: hsl(var(--color-green-hs), var(--color-green-l-900));--color-green-950: hsl(var(--color-green-hs), var(--color-green-l-950));--color-aqua-h: 180;--color-aqua-s: 50%;--color-aqua-hs: var(--color-aqua-h), var(--color-aqua-s);--color-aqua-boost: -4%;--color-aqua-l-100: calc(var(--color-l-100) + var(--color-aqua-boost));--color-aqua-l-150: calc(var(--color-l-150) + var(--color-aqua-boost));--color-aqua-l-200: calc(var(--color-l-200) + var(--color-aqua-boost));--color-aqua-l-250: calc(var(--color-l-250) + var(--color-aqua-boost));--color-aqua-l-300: calc(var(--color-l-300) + var(--color-aqua-boost));--color-aqua-l-350: calc(var(--color-l-350) + var(--color-aqua-boost));--color-aqua-l-400: calc(var(--color-l-400) + var(--color-aqua-boost));--color-aqua-l-450: calc(var(--color-l-450) + var(--color-aqua-boost));--color-aqua-l-500: calc(var(--color-l-500) + var(--color-aqua-boost));--color-aqua-l-550: calc(var(--color-l-550) + var(--color-aqua-boost));--color-aqua-l-600: calc(var(--color-l-600) + var(--color-aqua-boost));--color-aqua-l-650: calc(var(--color-l-650) + var(--color-aqua-boost));--color-aqua-l-700: calc(var(--color-l-700) + var(--color-aqua-boost));--color-aqua-l-750: calc(var(--color-l-750) + var(--color-aqua-boost));--color-aqua-l-800: calc(var(--color-l-800) + var(--color-aqua-boost));--color-aqua-l-850: calc(var(--color-l-850) + var(--color-aqua-boost));--color-aqua-l-900: calc(var(--color-l-900) + var(--color-aqua-boost));--color-aqua-l-950: calc(var(--color-l-950) + var(--color-aqua-boost));--color-aqua-100: hsl(var(--color-aqua-hs), var(--color-aqua-l-100));--color-aqua-150: hsl(var(--color-aqua-hs), var(--color-aqua-l-150));--color-aqua-200: hsl(var(--color-aqua-hs), var(--color-aqua-l-200));--color-aqua-250: hsl(var(--color-aqua-hs), var(--color-aqua-l-250));--color-aqua-300: hsl(var(--color-aqua-hs), var(--color-aqua-l-300));--color-aqua-350: hsl(var(--color-aqua-hs), var(--color-aqua-l-350));--color-aqua-400: hsl(var(--color-aqua-hs), var(--color-aqua-l-400));--color-aqua-450: hsl(var(--color-aqua-hs), var(--color-aqua-l-450));--color-aqua-500: hsl(var(--color-aqua-hs), var(--color-aqua-l-500));--color-aqua-550: hsl(var(--color-aqua-hs), var(--color-aqua-l-550));--color-aqua-600: hsl(var(--color-aqua-hs), var(--color-aqua-l-600));--color-aqua-650: hsl(var(--color-aqua-hs), var(--color-aqua-l-650));--color-aqua-700: hsl(var(--color-aqua-hs), var(--color-aqua-l-700));--color-aqua-750: hsl(var(--color-aqua-hs), var(--color-aqua-l-750));--color-aqua-800: hsl(var(--color-aqua-hs), var(--color-aqua-l-800));--color-aqua-850: hsl(var(--color-aqua-hs), var(--color-aqua-l-850));--color-aqua-900: hsl(var(--color-aqua-hs), var(--color-aqua-l-900));--color-aqua-950: hsl(var(--color-aqua-hs), var(--color-aqua-l-950));--color-blue-h: 210;--color-blue-s: 65%;--color-blue-hs: var(--color-blue-h), var(--color-blue-s);--color-blue-boost: 3%;--color-blue-l-100: calc(var(--color-l-100) + var(--color-blue-boost));--color-blue-l-150: calc(var(--color-l-150) + var(--color-blue-boost));--color-blue-l-200: calc(var(--color-l-200) + var(--color-blue-boost));--color-blue-l-250: calc(var(--color-l-250) + var(--color-blue-boost));--color-blue-l-300: calc(var(--color-l-300) + var(--color-blue-boost));--color-blue-l-350: calc(var(--color-l-350) + var(--color-blue-boost));--color-blue-l-400: calc(var(--color-l-400) + var(--color-blue-boost));--color-blue-l-450: calc(var(--color-l-450) + var(--color-blue-boost));--color-blue-l-500: calc(var(--color-l-500) + var(--color-blue-boost));--color-blue-l-550: calc(var(--color-l-550) + var(--color-blue-boost));--color-blue-l-600: calc(var(--color-l-600) + var(--color-blue-boost));--color-blue-l-650: calc(var(--color-l-650) + var(--color-blue-boost));--color-blue-l-700: calc(var(--color-l-700) + var(--color-blue-boost));--color-blue-l-750: calc(var(--color-l-750) + var(--color-blue-boost));--color-blue-l-800: calc(var(--color-l-800) + var(--color-blue-boost));--color-blue-l-850: calc(var(--color-l-850) + var(--color-blue-boost));--color-blue-l-900: calc(var(--color-l-900) + var(--color-blue-boost));--color-blue-l-950: calc(var(--color-l-950) + var(--color-blue-boost));--color-blue-100: hsl(var(--color-blue-hs), var(--color-blue-l-100));--color-blue-150: hsl(var(--color-blue-hs), var(--color-blue-l-150));--color-blue-200: hsl(var(--color-blue-hs), var(--color-blue-l-200));--color-blue-250: hsl(var(--color-blue-hs), var(--color-blue-l-250));--color-blue-300: hsl(var(--color-blue-hs), var(--color-blue-l-300));--color-blue-350: hsl(var(--color-blue-hs), var(--color-blue-l-350));--color-blue-400: hsl(var(--color-blue-hs), var(--color-blue-l-400));--color-blue-450: hsl(var(--color-blue-hs), var(--color-blue-l-450));--color-blue-500: hsl(var(--color-blue-hs), var(--color-blue-l-500));--color-blue-550: hsl(var(--color-blue-hs), var(--color-blue-l-550));--color-blue-600: hsl(var(--color-blue-hs), var(--color-blue-l-600));--color-blue-650: hsl(var(--color-blue-hs), var(--color-blue-l-650));--color-blue-700: hsl(var(--color-blue-hs), var(--color-blue-l-700));--color-blue-750: hsl(var(--color-blue-hs), var(--color-blue-l-750));--color-blue-800: hsl(var(--color-blue-hs), var(--color-blue-l-800));--color-blue-850: hsl(var(--color-blue-hs), var(--color-blue-l-850));--color-blue-900: hsl(var(--color-blue-hs), var(--color-blue-l-900));--color-blue-950: hsl(var(--color-blue-hs), var(--color-blue-l-950));--color-purple-h: 275;--color-purple-s: 60%;--color-purple-hs: var(--color-purple-h), var(--color-purple-s);--color-purple-boost: 0%;--color-purple-l-100: calc(var(--color-l-100) + var(--color-purple-boost));--color-purple-l-150: calc(var(--color-l-150) + var(--color-purple-boost));--color-purple-l-200: calc(var(--color-l-200) + var(--color-purple-boost));--color-purple-l-250: calc(var(--color-l-250) + var(--color-purple-boost));--color-purple-l-300: calc(var(--color-l-300) + var(--color-purple-boost));--color-purple-l-350: calc(var(--color-l-350) + var(--color-purple-boost));--color-purple-l-400: calc(var(--color-l-400) + var(--color-purple-boost));--color-purple-l-450: calc(var(--color-l-450) + var(--color-purple-boost));--color-purple-l-500: calc(var(--color-l-500) + var(--color-purple-boost));--color-purple-l-550: calc(var(--color-l-550) + var(--color-purple-boost));--color-purple-l-600: calc(var(--color-l-600) + var(--color-purple-boost));--color-purple-l-650: calc(var(--color-l-650) + var(--color-purple-boost));--color-purple-l-700: calc(var(--color-l-700) + var(--color-purple-boost));--color-purple-l-750: calc(var(--color-l-750) + var(--color-purple-boost));--color-purple-l-800: calc(var(--color-l-800) + var(--color-purple-boost));--color-purple-l-850: calc(var(--color-l-850) + var(--color-purple-boost));--color-purple-l-900: calc(var(--color-l-900) + var(--color-purple-boost));--color-purple-l-950: calc(var(--color-l-950) + var(--color-purple-boost));--color-purple-100: hsl(var(--color-purple-hs), var(--color-purple-l-100));--color-purple-150: hsl(var(--color-purple-hs), var(--color-purple-l-150));--color-purple-200: hsl(var(--color-purple-hs), var(--color-purple-l-200));--color-purple-250: hsl(var(--color-purple-hs), var(--color-purple-l-250));--color-purple-300: hsl(var(--color-purple-hs), var(--color-purple-l-300));--color-purple-350: hsl(var(--color-purple-hs), var(--color-purple-l-350));--color-purple-400: hsl(var(--color-purple-hs), var(--color-purple-l-400));--color-purple-450: hsl(var(--color-purple-hs), var(--color-purple-l-450));--color-purple-500: hsl(var(--color-purple-hs), var(--color-purple-l-500));--color-purple-550: hsl(var(--color-purple-hs), var(--color-purple-l-550));--color-purple-600: hsl(var(--color-purple-hs), var(--color-purple-l-600));--color-purple-650: hsl(var(--color-purple-hs), var(--color-purple-l-650));--color-purple-700: hsl(var(--color-purple-hs), var(--color-purple-l-700));--color-purple-750: hsl(var(--color-purple-hs), var(--color-purple-l-750));--color-purple-800: hsl(var(--color-purple-hs), var(--color-purple-l-800));--color-purple-850: hsl(var(--color-purple-hs), var(--color-purple-l-850));--color-purple-900: hsl(var(--color-purple-hs), var(--color-purple-l-900));--color-purple-950: hsl(var(--color-purple-hs), var(--color-purple-l-950));--color-pink-h: 320;--color-pink-s: 70%;--color-pink-hs: var(--color-pink-h), var(--color-pink-s);--color-pink-boost: 0%;--color-pink-l-100: calc(var(--color-l-100) + var(--color-pink-boost));--color-pink-l-150: calc(var(--color-l-150) + var(--color-pink-boost));--color-pink-l-200: calc(var(--color-l-200) + var(--color-pink-boost));--color-pink-l-250: calc(var(--color-l-250) + var(--color-pink-boost));--color-pink-l-300: calc(var(--color-l-300) + var(--color-pink-boost));--color-pink-l-350: calc(var(--color-l-350) + var(--color-pink-boost));--color-pink-l-400: calc(var(--color-l-400) + var(--color-pink-boost));--color-pink-l-450: calc(var(--color-l-450) + var(--color-pink-boost));--color-pink-l-500: calc(var(--color-l-500) + var(--color-pink-boost));--color-pink-l-550: calc(var(--color-l-550) + var(--color-pink-boost));--color-pink-l-600: calc(var(--color-l-600) + var(--color-pink-boost));--color-pink-l-650: calc(var(--color-l-650) + var(--color-pink-boost));--color-pink-l-700: calc(var(--color-l-700) + var(--color-pink-boost));--color-pink-l-750: calc(var(--color-l-750) + var(--color-pink-boost));--color-pink-l-800: calc(var(--color-l-800) + var(--color-pink-boost));--color-pink-l-850: calc(var(--color-l-850) + var(--color-pink-boost));--color-pink-l-900: calc(var(--color-l-900) + var(--color-pink-boost));--color-pink-l-950: calc(var(--color-l-950) + var(--color-pink-boost));--color-pink-100: hsl(var(--color-pink-hs), var(--color-pink-l-100));--color-pink-150: hsl(var(--color-pink-hs), var(--color-pink-l-150));--color-pink-200: hsl(var(--color-pink-hs), var(--color-pink-l-200));--color-pink-250: hsl(var(--color-pink-hs), var(--color-pink-l-250));--color-pink-300: hsl(var(--color-pink-hs), var(--color-pink-l-300));--color-pink-350: hsl(var(--color-pink-hs), var(--color-pink-l-350));--color-pink-400: hsl(var(--color-pink-hs), var(--color-pink-l-400));--color-pink-450: hsl(var(--color-pink-hs), var(--color-pink-l-450));--color-pink-500: hsl(var(--color-pink-hs), var(--color-pink-l-500));--color-pink-550: hsl(var(--color-pink-hs), var(--color-pink-l-550));--color-pink-600: hsl(var(--color-pink-hs), var(--color-pink-l-600));--color-pink-650: hsl(var(--color-pink-hs), var(--color-pink-l-650));--color-pink-700: hsl(var(--color-pink-hs), var(--color-pink-l-700));--color-pink-750: hsl(var(--color-pink-hs), var(--color-pink-l-750));--color-pink-800: hsl(var(--color-pink-hs), var(--color-pink-l-800));--color-pink-850: hsl(var(--color-pink-hs), var(--color-pink-l-850));--color-pink-900: hsl(var(--color-pink-hs), var(--color-pink-l-900));--color-pink-950: hsl(var(--color-pink-hs), var(--color-pink-l-950));--color-gray-h: 0;--color-gray-s: 0%;--color-gray-hs: var(--color-gray-h), var(--color-gray-s);--color-gray-boost: 0%;--color-gray-l-100: calc(var(--color-l-100) + var(--color-gray-boost));--color-gray-l-150: calc(var(--color-l-150) + var(--color-gray-boost));--color-gray-l-200: calc(var(--color-l-200) + var(--color-gray-boost));--color-gray-l-250: calc(var(--color-l-250) + var(--color-gray-boost));--color-gray-l-300: calc(var(--color-l-300) + var(--color-gray-boost));--color-gray-l-350: calc(var(--color-l-350) + var(--color-gray-boost));--color-gray-l-400: calc(var(--color-l-400) + var(--color-gray-boost));--color-gray-l-450: calc(var(--color-l-450) + var(--color-gray-boost));--color-gray-l-500: calc(var(--color-l-500) + var(--color-gray-boost));--color-gray-l-550: calc(var(--color-l-550) + var(--color-gray-boost));--color-gray-l-600: calc(var(--color-l-600) + var(--color-gray-boost));--color-gray-l-650: calc(var(--color-l-650) + var(--color-gray-boost));--color-gray-l-700: calc(var(--color-l-700) + var(--color-gray-boost));--color-gray-l-750: calc(var(--color-l-750) + var(--color-gray-boost));--color-gray-l-800: calc(var(--color-l-800) + var(--color-gray-boost));--color-gray-l-850: calc(var(--color-l-850) + var(--color-gray-boost));--color-gray-l-900: calc(var(--color-l-900) + var(--color-gray-boost));--color-gray-l-950: calc(var(--color-l-950) + var(--color-gray-boost));--color-gray-100: hsl(var(--color-gray-hs), var(--color-gray-l-100));--color-gray-150: hsl(var(--color-gray-hs), var(--color-gray-l-150));--color-gray-200: hsl(var(--color-gray-hs), var(--color-gray-l-200));--color-gray-250: hsl(var(--color-gray-hs), var(--color-gray-l-250));--color-gray-300: hsl(var(--color-gray-hs), var(--color-gray-l-300));--color-gray-350: hsl(var(--color-gray-hs), var(--color-gray-l-350));--color-gray-400: hsl(var(--color-gray-hs), var(--color-gray-l-400));--color-gray-450: hsl(var(--color-gray-hs), var(--color-gray-l-450));--color-gray-500: hsl(var(--color-gray-hs), var(--color-gray-l-500));--color-gray-550: hsl(var(--color-gray-hs), var(--color-gray-l-550));--color-gray-600: hsl(var(--color-gray-hs), var(--color-gray-l-600));--color-gray-650: hsl(var(--color-gray-hs), var(--color-gray-l-650));--color-gray-700: hsl(var(--color-gray-hs), var(--color-gray-l-700));--color-gray-750: hsl(var(--color-gray-hs), var(--color-gray-l-750));--color-gray-800: hsl(var(--color-gray-hs), var(--color-gray-l-800));--color-gray-850: hsl(var(--color-gray-hs), var(--color-gray-l-850));--color-gray-900: hsl(var(--color-gray-hs), var(--color-gray-l-900));--color-gray-950: hsl(var(--color-gray-hs), var(--color-gray-l-950));--color-black: hsl(0, 0%, 0%);--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-800);--color-border: var(--csstools-light-dark-toggle--0, var(--color-gray-300));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-850);--color-border-dimmed: var(--csstools-light-dark-toggle--1, hsla(0, 0%, 0%, .1));--color-dark: var(--color-gray-900);--color-focus: var(--color-blue-600);--color-light: var(--color-gray-200);--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-white);--color-text: var(--csstools-light-dark-toggle--2, var(--color-black));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-400);--color-text-dimmed: var(--csstools-light-dark-toggle--3, var(--color-gray-700));--color-white: hsl(0, 0%, 100%);--color-backdrop: rgba(0, 0, 0, .6);--color-background: var(--panel-color-back);--color-gray: var(--color-gray-600);--color-red: var(--color-red-600);--color-orange: var(--color-orange-600);--color-yellow: var(--color-yellow-600);--color-green: var(--color-green-600);--color-aqua: var(--color-aqua-600);--color-blue: var(--color-blue-600);--color-purple: var(--color-purple-600);--color-focus-light: var(--color-focus);--color-focus-outline: var(--color-focus);--color-negative: var(--color-red-700);--color-negative-light: var(--color-red-500);--color-negative-outline: var(--color-red-900);--color-notice: var(--color-orange-700);--color-notice-light: var(--color-orange-500);--color-positive: var(--color-green-700);--color-positive-light: var(--color-green-500);--color-positive-outline: var(--color-green-900);--color-text-light: var(--color-text-dimmed)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-800);--color-border: var(--csstools-light-dark-toggle--0, var(--color-gray-300));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-850);--color-border-dimmed: var(--csstools-light-dark-toggle--1, hsla(0, 0%, 0%, .1));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-white);--color-text: var(--csstools-light-dark-toggle--2, var(--color-black));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-400);--color-text-dimmed: var(--csstools-light-dark-toggle--3, var(--color-gray-700))}}@supports (color: light-dark(red,red)){:root{--color-border: light-dark(var(--color-gray-300), var(--color-gray-800));--color-border-dimmed: light-dark( hsla(0, 0%, 0%, .1), var(--color-gray-850) );--color-text: light-dark(var(--color-black), var(--color-white));--color-text-dimmed: light-dark(var(--color-gray-700), var(--color-gray-400))}}:root:has(.k-panel[data-theme=dark]){--csstools-color-scheme--light: ;color-scheme:dark;--color-l-100: 95%;--color-l-150: 90%;--color-l-200: 86%;--color-l-250: 79%;--color-l-300: 74%;--color-l-350: 71%;--color-l-400: 68%;--color-l-450: 66%;--color-l-500: 64%;--color-l-550: 59%;--color-l-600: 54%;--color-l-650: 46%;--color-l-700: 37%;--color-l-750: 33%;--color-l-800: 25%;--color-l-850: 19%;--color-l-900: 12%;--color-l-950: 7%}:root{--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-mono: "SFMono-Regular", Consolas, Liberation Mono, Menlo, Courier, monospace}:root{--text-xs: .75rem;--text-sm: .875rem;--text-md: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--text-3xl: 1.75rem;--text-4xl: 2.5rem;--text-5xl: 3rem;--text-6xl: 4rem;--text-base: var(--text-md);--font-size-tiny: var(--text-xs);--font-size-small: var(--text-sm);--font-size-medium: var(--text-base);--font-size-large: var(--text-xl);--font-size-huge: var(--text-2xl);--font-size-monster: var(--text-3xl)}:root{--font-thin: 300;--font-normal: 400;--font-semi: 500;--font-bold: 600}:root{--height-xs: 1.5rem;--height-sm: 1.75rem;--height-md: 2rem;--height-lg: 2.25rem;--height-xl: 2.5rem;--height: var(--height-md)}:root{--opacity-disabled: .5}:root{--rounded-xs: 1px;--rounded-sm: .125rem;--rounded-md: .25rem;--rounded-lg: .375rem;--rounded-xl: .5rem;--rounded: var(--rounded-md)}:root{--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .025);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .05);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .05);--shadow: var(--shadow-sm);--shadow-toolbar: rgba(0, 0, 0, .1) -2px 0 5px, var(--shadow), var(--shadow-xl);--shadow-outline: var(--color-focus, currentColor) 0 0 0 2px;--shadow-inset: inset 0 2px 4px 0 rgba(0, 0, 0, .06);--shadow-sticky: rgba(0, 0, 0, .05) 0 2px 5px;--box-shadow-dropdown: var(--shadow-dropdown);--box-shadow-item: var(--shadow);--box-shadow-focus: var(--shadow-xl);--shadow-dropdown: var(--shadow-lg);--shadow-item: var(--shadow-sm)}:root:has(.k-panel[data-theme=dark]){--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .2), 0 1px 2px 0 rgba(0, 0, 0, .125);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .4), 0 10px 10px -5px rgba(0, 0, 0, .35)}:root{--spacing-0: 0;--spacing-1: .25rem;--spacing-2: .5rem;--spacing-3: .75rem;--spacing-4: 1rem;--spacing-6: 1.5rem;--spacing-8: 2rem;--spacing-12: 3rem;--spacing-16: 4rem;--spacing-24: 6rem;--spacing-36: 9rem;--spacing-48: 12rem;--spacing-px: 1px;--spacing-2px: 2px;--spacing-5: 1.25rem;--spacing-10: 2.5rem;--spacing-20: 5rem}:root{--z-offline: 1200;--z-fatal: 1100;--z-loader: 1000;--z-notification: 900;--z-dialog: 800;--z-navigation: 700;--z-dropdown: 600;--z-drawer: 500;--z-dropzone: 400;--z-toolbar: 300;--z-content: 200;--z-background: 100}:root{--pattern-size: 16px;--pattern-light: repeating-conic-gradient( hsl(0, 0%, 100%) 0% 25%, hsl(0, 0%, 90%) 0% 50% ) 50% / var(--pattern-size) var(--pattern-size);--pattern-dark: repeating-conic-gradient( hsla(0, 0%, 15%) 0% 25%, hsl(0, 0%, 22%) 0% 50% ) 50% / var(--pattern-size) var(--pattern-size);--pattern: var(--pattern-dark)}:root{--container: 80rem;--leading-none: 1;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.625;--leading-loose: 2;--field-input-padding: var(--input-padding);--field-input-height: var(--input-height);--field-input-line-height: var(--input-leading);--field-input-font-size: var(--input-font-size);--bg-pattern: var(--pattern)}:root{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-800);--choice-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-300);--choice-color-border: var(--csstools-light-dark-toggle--1, var(--color-gray-500));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-200);--choice-color-checked: var(--csstools-light-dark-toggle--2, var(--color-black));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-700);--choice-color-disabled: var(--csstools-light-dark-toggle--3, var(--color-gray-400));--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-gray-750);--choice-color-border-disabled: var(--csstools-light-dark-toggle--4, var(--color-gray-300));--csstools-light-dark-toggle--5: var(--csstools-color-scheme--light) var(--color-dark);--choice-color-icon: var(--csstools-light-dark-toggle--5, var(--color-light));--choice-color-info: var(--color-text-dimmed);--choice-color-text: var(--color-text);--choice-color-toggle: var(--choice-color-disabled);--choice-height: 1rem;--choice-rounded: var(--rounded-sm)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-800);--choice-color-back: var(--csstools-light-dark-toggle--0, var(--color-white));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-300);--choice-color-border: var(--csstools-light-dark-toggle--1, var(--color-gray-500));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-gray-200);--choice-color-checked: var(--csstools-light-dark-toggle--2, var(--color-black));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-700);--choice-color-disabled: var(--csstools-light-dark-toggle--3, var(--color-gray-400));--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-gray-750);--choice-color-border-disabled: var(--csstools-light-dark-toggle--4, var(--color-gray-300));--csstools-light-dark-toggle--5: var(--csstools-color-scheme--light) var(--color-dark);--choice-color-icon: var(--csstools-light-dark-toggle--5, var(--color-light))}}@supports (color: light-dark(red,red)){:root{--choice-color-back: light-dark(var(--color-white), var(--color-gray-800));--choice-color-border: light-dark( var(--color-gray-500), var(--color-gray-300) );--choice-color-checked: light-dark(var(--color-black), var(--color-gray-200));--choice-color-disabled: light-dark( var(--color-gray-400), var(--color-gray-700) );--choice-color-border-disabled: light-dark( var(--color-gray-300), var(--color-gray-750) );--choice-color-icon: light-dark(var(--color-light), var(--color-dark))}}input:where([type=checkbox],[type=radio]){position:relative;cursor:pointer;overflow:hidden;flex-shrink:0;height:var(--choice-height);aspect-ratio:1/1;border:1px solid var(--choice-color-border);-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--choice-rounded);background:var(--choice-color-back);box-shadow:var(--shadow-sm)}input:where([type=checkbox],[type=radio]):after{position:absolute;content:"";display:none;place-items:center;text-align:center}input:where([type=checkbox],[type=radio]):focus{outline:var(--outline);outline-offset:-1px;color:var(--color-focus)}input:where([type=checkbox]):checked{border-color:var(--choice-color-checked)}input:where([type=checkbox],[type=radio]):checked:after{background:var(--choice-color-checked);display:grid}input:where([type=checkbox],[type=radio]):checked:focus{--choice-color-checked: var(--color-focus)}input:where([type=checkbox],[type=radio])[disabled]{--choice-color-back: none;--choice-color-border: var(--choice-color-border-disabled);--choice-color-checked: var(--choice-color-disabled);box-shadow:none;cursor:not-allowed}input[type=checkbox]:checked:after{content:"✓";top:0;right:0;bottom:0;left:0;font-weight:700;color:var(--choice-color-icon);line-height:1}input[type=radio]{--choice-rounded: 50%}input[type=radio]:after{top:3px;right:3px;bottom:3px;left:3px;font-size:9px;border-radius:var(--choice-rounded)}input[type=checkbox][data-variant=toggle]{--choice-rounded: var(--choice-height);width:calc(var(--choice-height) * 2);aspect-ratio:2/1}input[type=checkbox][data-variant=toggle]:after{background:var(--choice-color-toggle);display:grid;top:1px;right:1px;bottom:1px;left:1px;width:.8rem;font-size:7px;border-radius:var(--choice-rounded);transition:margin-inline-start 75ms ease-in-out,background .1s ease-in-out}input[type=checkbox][data-variant=toggle]:checked{border-color:var(--choice-color-border)}input[type=checkbox][data-variant=toggle]:checked:after{background:var(--choice-color-checked);margin-inline-start:50%}:root{--range-thumb-color: white;--range-thumb-focus-outline: var(--outline);--range-thumb-size: 1rem;--range-thumb-shadow: rgba(0, 0, 0, .1) 0 2px 4px 2px, rgba(0, 0, 0, .125) 0 0 0 1px;--csstools-light-dark-toggle--6: var(--csstools-color-scheme--light) var(--color-black);--range-track-back: var(--csstools-light-dark-toggle--6, var(--color-gray-300));--range-track-height: var(--range-thumb-size)}@supports not (color: light-dark(tan,tan)){:root *{--csstools-light-dark-toggle--6: var(--csstools-color-scheme--light) var(--color-black);--range-track-back: var(--csstools-light-dark-toggle--6, var(--color-gray-300))}}@supports (color: light-dark(red,red)){:root{--range-track-back: light-dark(var(--color-gray-300), var(--color-black))}}:where(input[type=range]){display:flex;align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;height:var(--range-thumb-size);border-radius:var(--range-track-size);width:100%}:where(input[type=range])::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--range-thumb-size);height:var(--range-thumb-size);border:0;background:var(--range-thumb-color);box-shadow:var(--range-thumb-shadow);transform:translateZ(0);margin-top:calc(((var(--range-thumb-size) - var(--range-track-height)) / 2) * -1);border-radius:50%;z-index:1;cursor:grab}:where(input[type=range])::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--range-thumb-size);height:var(--range-thumb-size);border:0;background:var(--range-thumb-color);box-shadow:var(--range-thumb-shadow);border-radius:50%;transform:translateZ(0);z-index:1;cursor:grab}:where(input[type=range])::-webkit-slider-thumb:active{cursor:grabbing}:where(input[type=range])::-moz-range-thumb:active{cursor:grabbing}:where(input[type=range])::-webkit-slider-runnable-track{background:var(--range-track-back);height:var(--range-track-height);border-radius:var(--range-track-height)}:where(input[type=range])::-moz-range-track{background:var(--range-track-back);height:var(--range-track-height);border-radius:var(--range-track-height)}:where(input[type=range][disabled]){--range-thumb-color: rgba(255, 255, 255, .2)}:where(input[type=range][disabled])::-webkit-slider-thumb{cursor:not-allowed}:where(input[type=range][disabled])::-moz-range-thumb{cursor:not-allowed}:where(input[type=range]):focus{outline:var(--outline)}:where(input[type=range]):focus::-webkit-slider-thumb{outline:var(--range-thumb-focus-outline)}:where(input[type=range]):focus::-moz-range-thumb{outline:var(--range-thumb-focus-outline)}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:where(b,strong){font-weight:var(--font-bold, 600)}:where([hidden]){display:none!important}:where(abbr){text-decoration:none}:where(input,button,textarea,select){border:0;font:inherit;line-height:inherit;color:inherit;background:none}:where(fieldset){border:0}:where(legend){width:100%;float:left}:where(legend+*){clear:both}:where(select){-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--color-white);color:var(--color-black);cursor:pointer}:where(textarea,select,input:not([type=checkbox],[type=radio],[type=reset],[type=submit])){width:100%;font-variant-numeric:tabular-nums}:where(textarea){resize:vertical;line-height:1.5}:where(input)::-webkit-calendar-picker-indicator{display:none}:where(input[type=search]){-webkit-appearance:none;-moz-appearance:none;appearance:none}:where(input)::-webkit-search-cancel-button{display:none}:where(button,label,select,summary,[role=button],[role=option]){cursor:pointer}:where(select[multiple]) option{display:flex;align-items:center}:where(input:-webkit-autofill){-webkit-text-fill-color:var(--color-text)!important;-webkit-background-clip:text}:where(:disabled){cursor:not-allowed}*::placeholder{color:var(--input-color-placeholder);opacity:1}:where(label:has(>input:disabled),label:has(+input:disabled)){cursor:not-allowed}:where(a){color:currentColor;text-decoration:none;text-underline-offset:.2ex}:where(ul,ol){list-style:none}:where(img,svg,video,canvas,audio,iframe,embed,object){display:block}:where(iframe){border:0}:where(img,picture,svg){max-inline-size:100%;block-size:auto}:where(p,h1,h2,h3,h4,h5,h6){overflow-wrap:break-word}:where(h1,h2,h3,h4,h5,h6){font:inherit}:where(:focus,:focus-visible,:focus-within){outline-color:var(--color-focus, currentColor);outline-offset:0}:where(:focus-visible){outline:var(--outline, 2px solid var(--color-focus, currentColor))}:where(:invalid){box-shadow:none;outline:0}:where(dialog){border:0;max-width:none;max-height:none}:where(hr){border:0}:where(table){font:inherit;width:100%;border-spacing:0;font-variant-numeric:tabular-nums}:where(table th){font:inherit;text-align:start}:where(svg){fill:currentColor}body{font-family:var(--font-sans, sans-serif);font-size:var(--text-sm);line-height:1;position:relative;accent-color:var(--color-focus, currentColor)}:where(sup,sub){position:relative;line-height:0;vertical-align:baseline;font-size:75%}:where(sup){top:-.5em}:where(sub){bottom:-.25em}:where(mark){background:var(--color-yellow-300)}:where(kbd){display:inline-block;padding-inline:var(--spacing-2);border-radius:var(--rounded);--csstools-light-dark-toggle--7: var(--csstools-color-scheme--light) var(--color-black);background:var(--csstools-light-dark-toggle--7, var(--color-white));box-shadow:var(--shadow)}@supports (color: light-dark(red,red)){:where(kbd){background:light-dark(var(--color-white),var(--color-black))}}[data-align=left]{--align: start}[data-align=center]{--align: center}[data-align=right]{--align: end}@keyframes LoadingCursor{to{cursor:progress}}@keyframes Spin{to{transform:rotate(360deg)}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}[data-theme]{--theme-color-h: 0;--theme-color-s: 0%;--theme-color-hs: var(--theme-color-h), var(--theme-color-s);--theme-color-boost: 3%;--theme-color-l-100: calc(var(--color-l-100) + var(--theme-color-boost));--theme-color-l-150: calc(var(--color-l-150) + var(--theme-color-boost));--theme-color-l-200: calc(var(--color-l-200) + var(--theme-color-boost));--theme-color-l-250: calc(var(--color-l-250) + var(--theme-color-boost));--theme-color-l-300: calc(var(--color-l-300) + var(--theme-color-boost));--theme-color-l-350: calc(var(--color-l-350) + var(--theme-color-boost));--theme-color-l-400: calc(var(--color-l-400) + var(--theme-color-boost));--theme-color-l-450: calc(var(--color-l-450) + var(--theme-color-boost));--theme-color-l-500: calc(var(--color-l-500) + var(--theme-color-boost));--theme-color-l-550: calc(var(--color-l-550) + var(--theme-color-boost));--theme-color-l-600: calc(var(--color-l-600) + var(--theme-color-boost));--theme-color-l-650: calc(var(--color-l-650) + var(--theme-color-boost));--theme-color-l-700: calc(var(--color-l-700) + var(--theme-color-boost));--theme-color-l-750: calc(var(--color-l-750) + var(--theme-color-boost));--theme-color-l-800: calc(var(--color-l-800) + var(--theme-color-boost));--theme-color-l-850: calc(var(--color-l-850) + var(--theme-color-boost));--theme-color-l-900: calc(var(--color-l-900) + var(--theme-color-boost));--theme-color-l-950: calc(var(--color-l-950) + var(--theme-color-boost));--theme-color-100: hsl(var(--theme-color-hs), var(--theme-color-l-100));--theme-color-150: hsl(var(--theme-color-hs), var(--theme-color-l-150));--theme-color-200: hsl(var(--theme-color-hs), var(--theme-color-l-200));--theme-color-250: hsl(var(--theme-color-hs), var(--theme-color-l-250));--theme-color-300: hsl(var(--theme-color-hs), var(--theme-color-l-300));--theme-color-350: hsl(var(--theme-color-hs), var(--theme-color-l-350));--theme-color-400: hsl(var(--theme-color-hs), var(--theme-color-l-400));--theme-color-450: hsl(var(--theme-color-hs), var(--theme-color-l-450));--theme-color-500: hsl(var(--theme-color-hs), var(--theme-color-l-500));--theme-color-550: hsl(var(--theme-color-hs), var(--theme-color-l-550));--theme-color-600: hsl(var(--theme-color-hs), var(--theme-color-l-600));--theme-color-650: hsl(var(--theme-color-hs), var(--theme-color-l-650));--theme-color-700: hsl(var(--theme-color-hs), var(--theme-color-l-700));--theme-color-750: hsl(var(--theme-color-hs), var(--theme-color-l-750));--theme-color-800: hsl(var(--theme-color-hs), var(--theme-color-l-800));--theme-color-850: hsl(var(--theme-color-hs), var(--theme-color-l-850));--theme-color-900: hsl(var(--theme-color-hs), var(--theme-color-l-900));--theme-color-950: hsl(var(--theme-color-hs), var(--theme-color-l-950));--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--theme-color-600);--theme-color-border: var(--csstools-light-dark-toggle--0, var(--theme-color-500));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--theme-color-500);--theme-color-back: var(--csstools-light-dark-toggle--1, var(--theme-color-400));--theme-color-hover: var(--theme-color-600);--theme-color-icon: var(--theme-color-600);--theme-color-icon-highlight: var(--theme-color-700);--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--theme-color-600);--theme-color-text: var(--csstools-light-dark-toggle--2, var(--theme-color-700));--theme-color-text-dimmed: hsl( var(--theme-color-h), calc(var(--theme-color-s) - 60%), 50% );--theme-color-text-highlight: var(--theme-color-900)}@supports not (color: light-dark(tan,tan)){[data-theme] *{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--theme-color-600);--theme-color-border: var(--csstools-light-dark-toggle--0, var(--theme-color-500));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--theme-color-500);--theme-color-back: var(--csstools-light-dark-toggle--1, var(--theme-color-400));--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--theme-color-600);--theme-color-text: var(--csstools-light-dark-toggle--2, var(--theme-color-700))}}@supports (color: light-dark(red,red)){[data-theme]{--theme-color-border: light-dark( var(--theme-color-500), var(--theme-color-600) );--theme-color-back: light-dark( var(--theme-color-400), var(--theme-color-500) );--theme-color-text: light-dark( var(--theme-color-700), var(--theme-color-600) )}}[data-theme^=red],[data-theme^=error],[data-theme^=negative]{--theme-color-h: var(--color-red-h);--theme-color-s: var(--color-red-s);--theme-color-boost: var(--color-red-boost)}[data-theme^=orange],[data-theme^=notice]{--theme-color-h: var(--color-orange-h);--theme-color-s: var(--color-orange-s);--theme-color-boost: var(--color-orange-boost)}[data-theme^=yellow],[data-theme^=warning]{--theme-color-h: var(--color-yellow-h);--theme-color-s: var(--color-yellow-s);--theme-color-boost: var(--color-yellow-boost)}[data-theme^=blue],[data-theme^=info]{--theme-color-h: var(--color-blue-h);--theme-color-s: var(--color-blue-s);--theme-color-boost: var(--color-blue-boost)}[data-theme^=pink],[data-theme^=love]{--theme-color-h: var(--color-pink-h);--theme-color-s: var(--color-pink-s);--theme-color-boost: var(--color-pink-boost)}[data-theme^=green],[data-theme^=positive]{--theme-color-h: var(--color-green-h);--theme-color-s: var(--color-green-s);--theme-color-boost: var(--color-green-boost)}[data-theme^=aqua]{--theme-color-h: var(--color-aqua-h);--theme-color-s: var(--color-aqua-s);--theme-color-boost: var(--color-aqua-boost)}[data-theme^=purple]{--theme-color-h: var(--color-purple-h);--theme-color-s: var(--color-purple-s);--theme-color-boost: var(--color-purple-boost)}[data-theme^=gray],[data-theme^=passive]{--theme-color-h: var(--color-gray-h);--theme-color-s: var(--color-gray-s);--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-950);--theme-color-back: var(--csstools-light-dark-toggle--3, var(--color-gray-300));--theme-color-boost: 10%;--theme-color-icon: var(--color-gray-600);--theme-color-text: var(--color-text);--theme-color-text-highlight: var(--theme-color-text)}@supports not (color: light-dark(tan,tan)){[data-theme^=gray] *,[data-theme^=passive] *{--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-gray-950);--theme-color-back: var(--csstools-light-dark-toggle--3, var(--color-gray-300))}}@supports (color: light-dark(red,red)){[data-theme^=gray],[data-theme^=passive]{--theme-color-back: light-dark(var(--color-gray-300), var(--color-gray-950))}}[data-theme^=white],[data-theme^=text]{--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-gray-850);--theme-color-back: var(--csstools-light-dark-toggle--4, var(--color-white));--theme-color-text: var(--color-text);--theme-color-text-highlight: var(--theme-color-text);--color-h: var(--color-text)}@supports not (color: light-dark(tan,tan)){[data-theme^=white] *,[data-theme^=text] *{--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-gray-850);--theme-color-back: var(--csstools-light-dark-toggle--4, var(--color-white))}}@supports (color: light-dark(red,red)){[data-theme^=white],[data-theme^=text]{--theme-color-back: light-dark(var(--color-white), var(--color-gray-850))}}[data-theme^=dark]{--theme-color-h: var(--color-gray-h);--theme-color-s: var(--color-gray-s);--theme-color-boost: var(--color-gray-boost);--theme-color-back: var(--color-gray-800);--theme-color-icon: var(--color-gray-500);--theme-color-text: var(--color-gray-200);--theme-color-text-highlight: var(--theme-color-text)}[data-theme=code]{--theme-color-back: var(--code-color-back);--theme-color-hover: var(--color-black);--theme-color-icon: var(--code-color-icon);--theme-color-text: var(--code-color-text);--theme-color-text-highlight: var(--theme-color-text);font-family:var(--code-font-family);font-size:var(--code-font-size)}[data-theme=empty]{--theme-color-back: var(--panel-color-back);--csstools-light-dark-toggle--5: var(--csstools-color-scheme--light) var(--color-border);--theme-color-border: var(--csstools-light-dark-toggle--5, var(--color-gray-400));--theme-color-icon: var(--color-gray-600);--theme-color-text: var(--color-text-dimmed);--theme-color-text-highlight: var(--theme-color-text);border:1px dashed var(--theme-color-border)}@supports not (color: light-dark(tan,tan)){[data-theme=empty] *{--csstools-light-dark-toggle--5: var(--csstools-color-scheme--light) var(--color-border);--theme-color-border: var(--csstools-light-dark-toggle--5, var(--color-gray-400))}}@supports (color: light-dark(red,red)){[data-theme=empty]{--theme-color-border: light-dark(var(--color-gray-400), var(--color-border))}}[data-theme=none]{--theme-color-back: transparent;--theme-color-border: transparent;--theme-color-icon: var(--color-text);--theme-color-text: var(--color-text);--theme-color-text-highlight: var(--theme-color-text)}[data-theme]{--theme: var(--theme-color-700);--theme-light: var(--theme-color-500);--theme-bg: var(--theme-color-500)}:root{--outline: 2px solid var(--color-focus, currentColor)}.scroll-x,.scroll-x-auto,.scroll-y,.scroll-y-auto{-webkit-overflow-scrolling:touch;transform:translateZ(0)}.scroll-x{overflow-x:scroll;overflow-y:hidden}.scroll-x-auto{overflow-x:auto;overflow-y:hidden}.scroll-y{overflow-x:hidden;overflow-y:scroll}.scroll-y-auto{overflow-x:hidden;overflow-y:auto}.input-hidden{position:absolute;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:0;height:0;opacity:0}.k-lab-index-view .k-panel-main>.k-header .k-input{--input-color-back: var(--color-border);--input-color-border: transparent;--input-height: var(--height-md);width:40cqw;max-width:20rem;transform:translateY(-.5rem)}.k-lab-index-view .k-panel-main>.k-header>.k-header-buttons{margin-bottom:0}.k-lab-index-view .k-panel-main>.k-box{margin-bottom:var(--spacing-8)}.k-lab-index-view .k-list-items{grid-template-columns:repeat(auto-fill,minmax(12rem,1fr))}.k-lab-docs-warning .k-box{box-shadow:var(--shadow)}.k-lab-docs-examples .k-code+.k-code{margin-top:var(--spacing-4)}.k-lab-docs-prop-values{font-size:var(--text-xs);border-left:2px solid var(--color-blue-300);padding-inline-start:var(--spacing-2)}.k-lab-docs-prop-values dl{font-weight:var(--font-bold)}.k-lab-docs-prop-values dl+dl{margin-top:var(--spacing-2)}.k-lab-docs-prop-values dd{display:inline-flex;flex-wrap:wrap;gap:var(--spacing-1)}.k-lab-docs-desc-header{display:flex;justify-content:space-between;align-items:center}.k-table .k-lab-docs-warning{--box-height: var(--height-xs);--text-font-size: var(--text-xs)}.k-labs-docs-params li{list-style:square;margin-inline-start:var(--spacing-3)}.k-labs-docs-params .k-lab-docs-types{margin-inline:1ch}.k-lab-docs-types{display:inline-flex;flex-wrap:wrap;gap:var(--spacing-1)}.k-lab-docs-types.k-text code{--csstools-light-dark-toggle--0: var(--csstools-color-scheme--light) var(--color-gray-900);color:var(--csstools-light-dark-toggle--0, var(--color-gray-800));--csstools-light-dark-toggle--1: var(--csstools-color-scheme--light) var(--color-gray-900);outline-color:var(--csstools-light-dark-toggle--1, var(--color-gray-400));background:var(--color-gray-300)}@supports (color: light-dark(red,red)){.k-lab-docs-types.k-text code{color:light-dark(var(--color-gray-800),var(--color-gray-900));outline-color:light-dark(var(--color-gray-400),var(--color-gray-900))}}.k-lab-docs-types code:is([data-type=boolean],[data-type=Boolean]){--csstools-light-dark-toggle--2: var(--csstools-color-scheme--light) var(--color-purple-900);color:var(--csstools-light-dark-toggle--2, var(--color-purple-800));--csstools-light-dark-toggle--3: var(--csstools-color-scheme--light) var(--color-purple-900);outline-color:var(--csstools-light-dark-toggle--3, var(--color-purple-400));background:var(--color-purple-300)}@supports (color: light-dark(red,red)){.k-lab-docs-types code:is([data-type=boolean],[data-type=Boolean]){color:light-dark(var(--color-purple-800),var(--color-purple-900));outline-color:light-dark(var(--color-purple-400),var(--color-purple-900))}}.k-lab-docs-types code:is([data-type=string],[data-type=String]){--csstools-light-dark-toggle--4: var(--csstools-color-scheme--light) var(--color-green-900);color:var(--csstools-light-dark-toggle--4, var(--color-green-800));--csstools-light-dark-toggle--5: var(--csstools-color-scheme--light) var(--color-green-900);outline-color:var(--csstools-light-dark-toggle--5, var(--color-green-500));background:var(--color-green-300)}@supports (color: light-dark(red,red)){.k-lab-docs-types code:is([data-type=string],[data-type=String]){color:light-dark(var(--color-green-800),var(--color-green-900));outline-color:light-dark(var(--color-green-500),var(--color-green-900))}}.k-lab-docs-types code:is([data-type=number],[data-type=Number]){--csstools-light-dark-toggle--6: var(--csstools-color-scheme--light) var(--color-orange-900);color:var(--csstools-light-dark-toggle--6, var(--color-orange-800));--csstools-light-dark-toggle--7: var(--csstools-color-scheme--light) var(--color-orange-900);outline-color:var(--csstools-light-dark-toggle--7, var(--color-orange-500));background:var(--color-orange-300)}@supports (color: light-dark(red,red)){.k-lab-docs-types code:is([data-type=number],[data-type=Number]){color:light-dark(var(--color-orange-800),var(--color-orange-900));outline-color:light-dark(var(--color-orange-500),var(--color-orange-900))}}.k-lab-docs-types code:is([data-type=array],[data-type=Array]){--csstools-light-dark-toggle--8: var(--csstools-color-scheme--light) var(--color-aqua-900);color:var(--csstools-light-dark-toggle--8, var(--color-aqua-800));--csstools-light-dark-toggle--9: var(--csstools-color-scheme--light) var(--color-aqua-900);outline-color:var(--csstools-light-dark-toggle--9, var(--color-aqua-500));background:var(--color-aqua-300)}@supports (color: light-dark(red,red)){.k-lab-docs-types code:is([data-type=array],[data-type=Array]){color:light-dark(var(--color-aqua-800),var(--color-aqua-900));outline-color:light-dark(var(--color-aqua-500),var(--color-aqua-900))}}.k-lab-docs-types code:is([data-type=object],[data-type=Object]){--csstools-light-dark-toggle--10: var(--csstools-color-scheme--light) var(--color-yellow-900);color:var(--csstools-light-dark-toggle--10, var(--color-yellow-800));--csstools-light-dark-toggle--11: var(--csstools-color-scheme--light) var(--color-yellow-900);outline-color:var(--csstools-light-dark-toggle--11, var(--color-yellow-500));background:var(--color-yellow-300)}@supports (color: light-dark(red,red)){.k-lab-docs-types code:is([data-type=object],[data-type=Object]){color:light-dark(var(--color-yellow-800),var(--color-yellow-900));outline-color:light-dark(var(--color-yellow-500),var(--color-yellow-900))}}.k-lab-docs-types code[data-type=func]{--csstools-light-dark-toggle--12: var(--csstools-color-scheme--light) var(--color-pink-900);color:var(--csstools-light-dark-toggle--12, var(--color-pink-800));outline-color:var(--color-pink-400);background:var(--color-pink-300)}@supports (color: light-dark(red,red)){.k-lab-docs-types code[data-type=func]{color:light-dark(var(--color-pink-800),var(--color-pink-900))}}.k-lab-docs-section+.k-lab-docs-section{margin-top:var(--spacing-12)}.k-lab-docs-section .k-headline{margin-bottom:var(--spacing-3)}.k-lab-docs-section .k-table td{padding:.375rem var(--table-cell-padding);vertical-align:top;line-height:1.5;word-break:break-word}.k-lab-docs-description :where(.k-text,.k-box)+:where(.k-text,.k-box){margin-top:var(--spacing-3)}.k-lab-docs-required{margin-inline-start:var(--spacing-1);font-size:.7rem;vertical-align:super;color:var(--color-red-600)}.k-lab-docs-since{margin-top:var(--spacing-1);font-size:var(--text-xs);color:var(--color-gray-600)}.k-lab-example{position:relative;container-type:inline-size;max-width:100%;outline-offset:-2px;border-radius:var(--rounded);border:1px solid var(--color-border)}.k-lab-example+.k-lab-example{margin-top:var(--spacing-12)}.k-lab-example-header{display:flex;justify-content:space-between;align-items:center;height:var(--height-md);padding-block:var(--spacing-3);padding-inline:var(--spacing-2);border-bottom:1px solid var(--color-border)}.k-lab-example-label{font-size:12px;color:var(--color-text-dimmed)}.k-lab-example-canvas,.k-lab-example-code{padding:var(--spacing-16)}.k-lab-example[data-flex=true] .k-lab-example-canvas{display:flex;align-items:center;gap:var(--spacing-6)}.k-lab-example-inspector{--icon-size: 13px;--button-color-icon: var(--color-gray-500)}.k-lab-example-inspector .k-button:not([data-theme]):hover{--button-color-icon: var(--color-gray-600)}.k-lab-example-inspector .k-button:where([data-theme]){--button-color-icon: var(--color-gray-800)}.k-lab-examples>:where(.k-text,.k-box){margin-bottom:var(--spacing-6)}.k-lab-form>footer{border-top:1px dashed var(--color-border);padding-top:var(--spacing-6)}.k-lab-examples h2{margin-bottom:var(--spacing-6)}.k-lab-examples *+h2{margin-top:var(--spacing-12)}:where(.k-lab-input-examples,.k-lab-field-examples) .k-lab-example:has(:invalid){outline:2px solid var(--color-red-500);outline-offset:-2px}.k-lab-input-examples-focus .k-lab-example-canvas>.k-button{margin-top:var(--spacing-6)}.k-lab-helpers-examples .k-lab-example .k-text{margin-bottom:var(--spacing-6)}.k-lab-helpers-examples h2{margin-bottom:var(--spacing-3);font-weight:var(--font-bold)}:root{--highlight-punctuation: var(--color-gray-500);--highlight-variable: var(--color-red-500);--highlight-constant: var(--color-orange-500);--highlight-keyword: var(--color-purple-500);--highlight-function: var(--color-blue-500);--highlight-operator: var(--color-aqua-500);--highlight-string: var(--color-green-500);--highlight-scope: var(--color-yellow-500)}.k-panel[data-theme=dark]{--highlight-punctuation: var(--color-gray-400);--highlight-variable: var(--color-red-400);--highlight-constant: var(--color-orange-400);--highlight-keyword: var(--color-purple-400);--highlight-function: var(--color-blue-400);--highlight-operator: var(--color-aqua-400);--highlight-string: var(--color-green-400);--highlight-scope: var(--color-yellow-400)}.token.punctuation,.token.comment,.token.doctype,.token.title .punctuation{color:var(--highlight-punctuation)}.token.tag,.token.markup,.token.variable,.token.this,.token.selector,.token.key,.token.kirbytag-bracket,.token.prolog,.token.delimiter{color:var(--highlight-variable)}.token.constant,.token.number,.token.boolean,.token.boolean.important,.token.attr-name,.token.kirbytag-attr,.token.kirbytag-name,.token.entity,.token.bold,.token.bold>.punctuation{color:var(--highlight-constant)}.token.keyword,.token.italic,.token.italic>.punctuation{color:var(--highlight-keyword)}.token.function{color:var(--highlight-function)}.token.operator,.token.title{color:var(--highlight-operator)}.token.string,.token.attr-value,.token.attr-value .punctuation,.token.list.punctuation{color:var(--highlight-string)}.token.scope,.token.class-name,.token.property,.token.url{color:var(--highlight-scope)}.token.title,.token.kirbytag-bracket,.token.list.punctuation,.token.bold{font-weight:var(--font-bold)}.token.italic{font-style:italic} diff --git a/kirby/panel/dist/img/icons.svg b/kirby/panel/dist/img/icons.svg index a95141e..70b799e 100644 --- a/kirby/panel/dist/img/icons.svg +++ b/kirby/panel/dist/img/icons.svg @@ -6,12 +6,18 @@ --> Deprecated: "+e.deprecated}})],1):e._e()}),[]).exports;const b=t({props:{params:{type:Array,default:()=>[]}}},(function(){var t=this,e=t._self._c;return t.params.length?e("ul",{staticClass:"k-labs-docs-params"},t._l(t.params,(function(s){return e("li",{key:s.name},[e("k-text",[e("code",[t._v(t._s(s.name))]),e("k-lab-docs-types",{attrs:{types:[s.type]}}),s.description.length?e("span",{domProps:{innerHTML:t._s(s.description)}}):t._e()],1)],1)})),0):t._e()}),[]).exports;const x=t({props:{types:{type:Array,default:()=>[]}}},(function(){var t=this,e=t._self._c;return e("k-text",{staticClass:"k-lab-docs-types"},t._l(t.types,(function(s){return e("code",{key:s,attrs:{"data-type":s}},[t._v(" "+t._s(s)+" ")])})),0)}),[]).exports;Vue.component("k-lab-docs-deprecated",m),Vue.component("k-lab-docs-params",b),Vue.component("k-lab-docs-types",x);const f=t({components:{"k-lab-docs-deprecated":s,"k-lab-docs-description":n,"k-lab-docs-examples":r,"k-lab-docs-props":i,"k-lab-docs-slots":d,"k-lab-docs-events":_,"k-lab-docs-methods":v,"k-lab-docs-docblock":u},mixins:[e,a,c,l,o,p,h,k],props:{component:String}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-docs"},[e("k-lab-docs-deprecated",{attrs:{deprecated:t.deprecated}}),e("k-lab-docs-description",{attrs:{description:t.description,since:t.since}}),e("k-lab-docs-examples",{attrs:{examples:t.examples}}),e("k-lab-docs-props",{attrs:{props:t.props}}),e("k-lab-docs-slots",{attrs:{slots:t.slots}}),e("k-lab-docs-events",{attrs:{events:t.events}}),e("k-lab-docs-methods",{attrs:{methods:t.methods}}),e("k-lab-docs-docblock",{attrs:{"doc-block":t.docBlock}})],1)}),[]).exports;export{f as D}; +import t from"vue";import{n as e}from"./index.min.js";const s=e({props:{icon:{type:String,default:"protected"},title:String,text:String}},function(){var t=this,e=t._self._c;return t.text.length?e("section",{staticClass:"k-lab-docs-section k-lab-docs-warning"},[e("k-lab-docs-warning",t._b({},"k-lab-docs-warning",t.$props,!1))],1):t._e()},[]).exports,a={props:{description:String,since:String}};const n=e({mixins:[a]},function(){var t,e,s,a=this,n=a._self._c;return(null==(t=a.description)?void 0:t.length)||(null==(e=a.since)?void 0:e.length)?n("section",{staticClass:"k-lab-docs-section"},[n("header",{staticClass:"k-lab-docs-desc-header"},[n("k-headline",{staticClass:"h3"},[a._v("Description")]),(null==(s=a.since)?void 0:s.length)?n("k-text",[a._v(" Since "),n("code",[a._v(a._s(a.since))])]):a._e()],1),n("k-box",{attrs:{theme:"text"}},[n("k-text",{attrs:{html:a.description}})],1)],1):a._e()},[]).exports,i={props:{examples:{default:()=>[],type:Array}}};const l=e({mixins:[i]},function(){var t=this,e=t._self._c;return t.examples.length?e("section",{staticClass:"k-lab-docs-section k-lab-docs-examples"},[e("k-headline",{staticClass:"h3"},[t._v("Examples")]),t._l(t.examples,function(s,a){return e("k-code",{key:a,attrs:{language:"html"}},[t._v(t._s(s.content))])})],2):t._e()},[]).exports,o={props:{props:{default:()=>[],type:Array}}};const r=e({mixins:[o]},function(){var t=this,e=t._self._c;return t.props.length?e("section",{staticClass:"k-lab-docs-section"},[e("k-headline",{staticClass:"h3"},[t._v("Props")]),e("div",{staticClass:"k-table"},[e("table",[t._m(0),e("tbody",t._l(t.props,function(s){var a,n,i,l,o,r,c,d,p;return e("tr",{key:s.name},[e("td",[e("k-text",[e("code",[t._v(t._s(s.name))]),s.required?e("abbr",{staticClass:"k-lab-docs-required"},[t._v("✶")]):t._e(),(null==(a=s.since)?void 0:a.length)?e("div",{staticClass:"k-lab-docs-since"},[t._v(" since "+t._s(s.since)+" ")]):t._e()])],1),e("td",[e("k-lab-docs-types",{attrs:{types:null==(n=s.type)?void 0:n.split("|")}})],1),e("td",[s.default?e("k-text",[e("code",[t._v(t._s(s.default))])]):t._e()],1),e("td",{staticClass:"k-lab-docs-description"},[e("k-lab-docs-warning",{attrs:{title:"Deprecated",text:s.deprecated}}),(null==(i=s.description)?void 0:i.length)?e("k-text",{attrs:{html:s.description}}):t._e(),(null==(l=s.value)?void 0:l.length)||(null==(o=s.values)?void 0:o.length)||(null==(r=s.example)?void 0:r.length)?e("k-text",{staticClass:"k-lab-docs-prop-values"},[(null==(c=s.value)?void 0:c.length)?e("dl",[e("dt",[t._v("Value")]),e("dd",[e("code",[t._v(t._s(s.value))])])]):t._e(),(null==(d=s.values)?void 0:d.length)?e("dl",[e("dt",[t._v("Values")]),e("dd",t._l(s.values,function(s){return e("code",{key:s},[t._v(" "+t._s(s.replaceAll("`",""))+" ")])}),0)]):t._e(),(null==(p=s.example)?void 0:p.length)?e("dl",[e("dt",[t._v("Example")]),e("dd",[e("code",[t._v(t._s(s.example))])])]):t._e()]):t._e()],1)])}),0)])])],1):t._e()},[function(){var t=this,e=t._self._c;return e("thead",[e("th",{staticStyle:{width:"10rem"}},[t._v("Name")]),e("th",{staticStyle:{width:"10rem"}},[t._v("Type")]),e("th",{staticStyle:{width:"10rem"}},[t._v("Default")]),e("th",[t._v("Description")])])}]).exports,c={props:{slots:{default:()=>[],type:Array}},computed:{hasBindings(){return this.slots.filter(t=>t.bindings.length).length}}};const d=e({mixins:[c]},function(){var t=this,e=t._self._c;return t.slots.length?e("section",{staticClass:"k-lab-docs-section"},[e("k-headline",{staticClass:"h3"},[t._v("Slots")]),e("div",{staticClass:"k-table"},[e("table",[e("thead",[e("th",{staticStyle:{width:"10rem"}},[t._v("Slot")]),e("th",[t._v("Description")]),t.hasBindings?e("th",[t._v("Bindings")]):t._e()]),e("tbody",t._l(t.slots,function(s){var a;return e("tr",{key:s.name},[e("td",{staticStyle:{width:"12rem"}},[e("k-text",[e("code",[t._v(t._s(s.name))]),(null==(a=s.since)?void 0:a.length)?e("div",{staticClass:"k-lab-docs-since"},[t._v(" since "+t._s(s.since)+" ")]):t._e()])],1),e("td",[e("k-lab-docs-warning",{attrs:{title:"Deprecated",text:s.deprecated}}),e("k-text",{attrs:{html:s.description}})],1),t.hasBindings?e("td",[e("k-lab-docs-params",{attrs:{params:s.bindings}})],1):t._e()])}),0)])])],1):t._e()},[]).exports,p={props:{events:{default:()=>[],type:Array}},computed:{hasProperties(){return this.events.filter(t=>t.properties.length).length}}};const _=e({mixins:[p]},function(){var t=this,e=t._self._c;return t.events.length?e("section",{staticClass:"k-lab-docs-section"},[e("k-headline",{staticClass:"h3"},[t._v("Events")]),e("div",{staticClass:"k-table"},[e("table",[e("thead",[e("th",{staticStyle:{width:"10rem"}},[t._v("Event")]),e("th",[t._v("Description")]),t.hasProperties?e("th",[t._v("Properties")]):t._e()]),e("tbody",t._l(t.events,function(s){var a;return e("tr",{key:s.name},[e("td",[e("k-text",[e("code",[t._v("@"+t._s(s.name))]),(null==(a=s.since)?void 0:a.length)?e("div",{staticClass:"k-lab-docs-since"},[t._v(" since "+t._s(s.since)+" ")]):t._e()])],1),e("td",[e("k-lab-docs-warning",{attrs:{title:"Deprecated",text:s.deprecated}}),e("k-text",{attrs:{html:s.description}})],1),t.hasProperties?e("td",[e("k-lab-docs-params",{attrs:{params:s.properties}})],1):t._e()])}),0)])])],1):t._e()},[]).exports,h={props:{methods:{default:()=>[],type:Array}}};const v=e({mixins:[h]},function(){var t=this,e=t._self._c;return t.methods.length?e("section",{staticClass:"k-lab-docs-section"},[e("k-headline",{staticClass:"h3"},[t._v("Methods")]),e("div",{staticClass:"k-table"},[e("table",[t._m(0),e("tbody",t._l(t.methods,function(s){var a;return e("tr",{key:s.name},[e("td",[e("k-text",[e("code",[t._v(t._s(s.name))]),(null==(a=s.since)?void 0:a.length)?e("div",{staticClass:"k-lab-docs-since"},[t._v(" since "+t._s(s.since)+" ")]):t._e()])],1),e("td",[e("k-lab-docs-warning",{attrs:{title:"Deprecated",text:s.deprecated}}),e("k-text",{attrs:{html:s.description}})],1),e("td",[e("k-lab-docs-params",{attrs:{params:s.params}})],1),e("td",[e("k-lab-docs-types",{attrs:{types:[s.returns]}})],1)])}),0)])])],1):t._e()},[function(){var t=this,e=t._self._c;return e("thead",[e("th",{staticStyle:{width:"10rem"}},[t._v("Method")]),e("th",[t._v("Description")]),e("th",{staticStyle:{width:"16rem"}},[t._v("Params")]),e("th",{staticStyle:{width:"10rem"}},[t._v("Returns")])])}]).exports,k={props:{docBlock:String}};const u=e({mixins:[k]},function(){var t,e=this,s=e._self._c;return(null==(t=e.docBlock)?void 0:t.length)?s("section",{staticClass:"k-lab-docs-section"},[s("header",[s("k-headline",{staticClass:"h3"},[e._v("Further information")])],1),s("k-box",{attrs:{theme:"text"}},[s("k-text",{attrs:{html:e.docBlock}})],1)],1):e._e()},[]).exports;const m=e({props:{icon:{type:String,default:"protected"},title:String,text:String}},function(){var t,e=this,s=e._self._c;return(null==(t=e.text)?void 0:t.length)?s("k-box",{staticClass:"k-lab-docs-warning",attrs:{icon:e.icon,theme:"warning"}},[s("k-text",{attrs:{html:""+e.title+": "+e.text}})],1):e._e()},[]).exports;const b=e({props:{params:{type:Array,default:()=>[]}}},function(){var t=this,e=t._self._c;return t.params.length?e("ul",{staticClass:"k-labs-docs-params"},t._l(t.params,function(s){return e("li",{key:s.name},[e("k-text",[e("code",[t._v(t._s(s.name))]),e("k-lab-docs-types",{attrs:{types:[s.type]}}),s.description.length?e("span",{domProps:{innerHTML:t._s(s.description)}}):t._e()],1)],1)}),0):t._e()},[]).exports;const x=e({props:{types:{type:Array,default:()=>[]}}},function(){var t=this,e=t._self._c;return e("k-text",{staticClass:"k-lab-docs-types"},t._l(t.types,function(s){return e("code",{key:s,attrs:{"data-type":s}},[t._v(" "+t._s(s)+" ")])}),0)},[]).exports;t.component("k-lab-docs-warning",m),t.component("k-lab-docs-params",b),t.component("k-lab-docs-types",x);const g=e({components:{"k-lab-docs-warning":s,"k-lab-docs-description":n,"k-lab-docs-examples":l,"k-lab-docs-props":r,"k-lab-docs-slots":d,"k-lab-docs-events":_,"k-lab-docs-methods":v,"k-lab-docs-docblock":u},mixins:[a,i,o,c,p,h,k],props:{component:String,deprecated:String,isUnstable:Boolean}},function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-docs"},[e("k-lab-docs-warning",{attrs:{title:"Deprecated",text:t.deprecated}}),t.isUnstable?e("k-lab-docs-warning",{attrs:{icon:"lab",title:"Unstable",text:"This component has been marked as unstable and may change in the future."}}):t._e(),e("k-lab-docs-description",{attrs:{description:t.description,since:t.since}}),e("k-lab-docs-examples",{attrs:{examples:t.examples}}),e("k-lab-docs-props",{attrs:{props:t.props}}),e("k-lab-docs-slots",{attrs:{slots:t.slots}}),e("k-lab-docs-events",{attrs:{events:t.events}}),e("k-lab-docs-methods",{attrs:{methods:t.methods}}),e("k-lab-docs-docblock",{attrs:{"doc-block":t.docBlock}})],1)},[]).exports;export{g as D}; diff --git a/kirby/panel/dist/js/DocsView.min.js b/kirby/panel/dist/js/DocsView.min.js index 887e7dc..f33ccc8 100644 --- a/kirby/panel/dist/js/DocsView.min.js +++ b/kirby/panel/dist/js/DocsView.min.js @@ -1 +1 @@ -import{D as t}from"./Docs.min.js";import{n as s}from"./index.min.js";import"./vendor.min.js";const o=s({components:{"k-lab-docs":t},props:{component:String,docs:Object,lab:String},mounted(){},methods:{reloadDocs(){this.$panel.view.refresh()}}},(function(){var t=this,s=t._self._c;return s("k-panel-inside",{staticClass:"k-lab-docs-view"},[s("k-header",[t._v(" "+t._s(t.component)+" "),t.docs.github||t.lab?s("k-button-group",{attrs:{slot:"buttons"},slot:"buttons"},[t.lab?s("k-button",{attrs:{icon:"lab",text:"Lab examples",size:"sm",variant:"filled",link:"/lab/"+t.lab}}):t._e(),t.docs.github?s("k-button",{attrs:{icon:"github",size:"sm",variant:"filled",link:t.docs.github,target:"_blank"}}):t._e()],1):t._e()],1),s("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[]).exports;export{o as default}; +import{D as t}from"./Docs.min.js";import{n as o}from"./index.min.js";import"vue";import"./vendor.min.js";const s=o({components:{"k-lab-docs":t},props:{buttons:Array,component:String,docs:Object,lab:String},mounted(){},methods:{reloadDocs(){this.$panel.view.refresh()}}},function(){var t=this,o=t._self._c;return o("k-panel-inside",{staticClass:"k-lab-docs-view",scopedSlots:t._u([{key:"topbar",fn:function(){return[o("k-theme-view-button",{attrs:{text:null,variant:null,size:"xs"}})]},proxy:!0}])},[o("k-header",{scopedSlots:t._u([{key:"buttons",fn:function(){return[o("k-view-buttons",{attrs:{buttons:t.buttons}})]},proxy:!0}])},[t._v(" "+t._s(t.component)+" ")]),o("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)},[]).exports;export{s as default}; diff --git a/kirby/panel/dist/js/Highlight.min.js b/kirby/panel/dist/js/Highlight.min.js index 76b89e9..156694b 100644 --- a/kirby/panel/dist/js/Highlight.min.js +++ b/kirby/panel/dist/js/Highlight.min.js @@ -1 +1 @@ -import{n as e}from"./index.min.js";import"./vendor.min.js";var t=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,a=0,n={},r={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof i?new i(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=c.reach);F+=w.value.length,w=w.next){var A=w.value;if(t.length>e.length)return;if(!(A instanceof i)){var $,_=1;if(y){if(!($=s(x,F,e,m))||$.index>=e.length)break;var z=$.index,S=$.index+$[0].length,j=F;for(j+=w.value.length;z>=j;)j+=(w=w.next).value.length;if(F=j-=w.value.length,w.value instanceof i)continue;for(var E=w;E!==t.tail&&(jc.reach&&(c.reach=L);var C=w.prev;if(O&&(C=u(t,C,O),F+=O.length),d(t,C,_),w=u(t,C,new i(g,h?r.tokenize(P,h):P,k,P)),q&&u(t,w,q),_>1){var T={cause:g+","+f,reach:L};l(e,t,a,w.prev,F,T),c&&T.reach>c.reach&&(c.reach=T.reach)}}}}}}function o(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,a){var n=t.next,r={value:a,prev:t,next:n};return t.next=r,n.prev=r,e.length++,r}function d(e,t,a){for(var n=t.next,r=0;r"+i.content+""},!e.document)return e.addEventListener?(r.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var a=JSON.parse(t.data),n=a.language,i=a.code,s=a.immediateClose;e.postMessage(r.highlight(i,r.languages[n],n)),s&&e.close()}),!1),r):r;var c=r.util.currentScript();function g(){r.manual||r.highlightAll()}if(c&&(r.filename=c.src,c.hasAttribute("data-manual")&&(r.manual=!0)),!r.manual){var p=document.readyState;"loading"===p||"interactive"===p&&c&&c.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return r}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});"undefined"!=typeof module&&module.exports&&(module.exports=t),"undefined"!=typeof global&&(global.Prism=t),t.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(e,a){var n={};n["language-"+a]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[a]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+a]={pattern:/[\s\S]+/,inside:t.languages[a]};var i={};i[e]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},t.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(e,a){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+e+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[a,"language-"+a],inside:t.languages[a]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+t.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var a=e.languages.markup;a&&(a.tag.addInlined("style","css"),a.tag.addAttribute("style","css"))}(t),t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),t.languages.js=t.languages.javascript,function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,n,r,i){if(a.language===n){var s=a.tokenStack=[];a.code=a.code.replace(r,(function(e){if("function"==typeof i&&!i(e))return e;for(var r,l=s.length;-1!==a.code.indexOf(r=t(n,l));)++l;return s[l]=e,r})),a.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(a,n){if(a.language===n&&a.tokenStack){a.grammar=e.languages[n];var r=0,i=Object.keys(a.tokenStack);!function s(l){for(var o=0;o=i.length);o++){var u=l[o];if("string"==typeof u||u.content&&"string"==typeof u.content){var d=i[r],c=a.tokenStack[d],g="string"==typeof u?u:u.content,p=t(n,d),f=g.indexOf(p);if(f>-1){++r;var b=g.substring(0,f),h=new e.Token(n,e.tokenize(c,a.grammar),"language-"+n,c),m=g.substring(f+p.length),y=[];b&&y.push.apply(y,s([b])),y.push(h),m&&y.push.apply(y,s([m])),"string"==typeof u?l.splice.apply(l,[o,1].concat(y)):u.content=y}}else u.content&&s(u.content)}return l}(a.tokens)}}}})}(t),function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,a=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],n=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,i=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:a,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:n,operator:r,punctuation:i};var s={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:s}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:s}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:a,number:n,operator:r,punctuation:i}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(t),function(e){var t=/[*&][^\s[\]{},]+/,a=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,n="(?:"+a.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+a.source+")?)",r="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),i="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function s(e,t){t=(t||"").replace(/m/g,"")+"m";var a="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return n})).replace(/<>/g,(function(){return e}));return RegExp(a,t)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return n}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return n})).replace(/<>/g,(function(){return"(?:"+r+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:s("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:s("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:s("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:s(i),lookbehind:!0,greedy:!0},number:{pattern:s("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:a,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(t),t.manual=!0;const a=e({mounted(){t.highlightAll(this.$el)},updated(){t.highlightAll(this.$el)},render(){return this.$scopedSlots.default({})}},null,null).exports;export{a as default}; +import{n as e}from"./index.min.js";import"vue";import"./vendor.min.js";var t=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,a=0,n={},r={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof i?new i(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=c.reach);F+=w.value.length,w=w.next){var A=w.value;if(t.length>e.length)return;if(!(A instanceof i)){var $,_=1;if(y){if(!($=s(x,F,e,m))||$.index>=e.length)break;var z=$.index,S=$.index+$[0].length,j=F;for(j+=w.value.length;z>=j;)j+=(w=w.next).value.length;if(F=j-=w.value.length,w.value instanceof i)continue;for(var E=w;E!==t.tail&&(jc.reach&&(c.reach=L);var C=w.prev;if(O&&(C=u(t,C,O),F+=O.length),d(t,C,_),w=u(t,C,new i(g,h?r.tokenize(P,h):P,k,P)),q&&u(t,w,q),_>1){var T={cause:g+","+f,reach:L};l(e,t,a,w.prev,F,T),c&&T.reach>c.reach&&(c.reach=T.reach)}}}}}}function o(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,a){var n=t.next,r={value:a,prev:t,next:n};return t.next=r,n.prev=r,e.length++,r}function d(e,t,a){for(var n=t.next,r=0;r"+i.content+""},!e.document)return e.addEventListener?(r.disableWorkerMessageHandler||e.addEventListener("message",function(t){var a=JSON.parse(t.data),n=a.language,i=a.code,s=a.immediateClose;e.postMessage(r.highlight(i,r.languages[n],n)),s&&e.close()},!1),r):r;var c=r.util.currentScript();function g(){r.manual||r.highlightAll()}if(c&&(r.filename=c.src,c.hasAttribute("data-manual")&&(r.manual=!0)),!r.manual){var p=document.readyState;"loading"===p||"interactive"===p&&c&&c.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return r}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});"undefined"!=typeof module&&module.exports&&(module.exports=t),"undefined"!=typeof global&&(global.Prism=t),t.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(e,a){var n={};n["language-"+a]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[a]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+a]={pattern:/[\s\S]+/,inside:t.languages[a]};var i={};i[e]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:r},t.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(e,a){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+e+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[a,"language-"+a],inside:t.languages[a]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+t.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var a=e.languages.markup;a&&(a.tag.addInlined("style","css"),a.tag.addAttribute("style","css"))}(t),t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),t.languages.js=t.languages.javascript,function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,n,r,i){if(a.language===n){var s=a.tokenStack=[];a.code=a.code.replace(r,function(e){if("function"==typeof i&&!i(e))return e;for(var r,l=s.length;-1!==a.code.indexOf(r=t(n,l));)++l;return s[l]=e,r}),a.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(a,n){if(a.language===n&&a.tokenStack){a.grammar=e.languages[n];var r=0,i=Object.keys(a.tokenStack);!function s(l){for(var o=0;o=i.length);o++){var u=l[o];if("string"==typeof u||u.content&&"string"==typeof u.content){var d=i[r],c=a.tokenStack[d],g="string"==typeof u?u:u.content,p=t(n,d),f=g.indexOf(p);if(f>-1){++r;var b=g.substring(0,f),h=new e.Token(n,e.tokenize(c,a.grammar),"language-"+n,c),m=g.substring(f+p.length),y=[];b&&y.push.apply(y,s([b])),y.push(h),m&&y.push.apply(y,s([m])),"string"==typeof u?l.splice.apply(l,[o,1].concat(y)):u.content=y}}else u.content&&s(u.content)}return l}(a.tokens)}}}})}(t),function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,a=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],n=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,i=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:a,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:n,operator:r,punctuation:i};var s={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:s}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:s}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:a,number:n,operator:r,punctuation:i}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}),e.hooks.add("after-tokenize",function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")})}(t),function(e){var t=/[*&][^\s[\]{},]+/,a=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,n="(?:"+a.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+a.source+")?)",r="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"}),i="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function s(e,t){t=(t||"").replace(/m/g,"")+"m";var a="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,function(){return n}).replace(/<>/g,function(){return e});return RegExp(a,t)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,function(){return n})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,function(){return n}).replace(/<>/g,function(){return"(?:"+r+"|"+i+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:s("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:s("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:s("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:s(i),lookbehind:!0,greedy:!0},number:{pattern:s("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:a,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(t),t.manual=!0;const a=e({mounted(){t.highlightAll(this.$el)},updated(){t.highlightAll(this.$el)},render(){return this.$scopedSlots.default({})}},null,null).exports;export{a as default}; diff --git a/kirby/panel/dist/js/IndexView.min.js b/kirby/panel/dist/js/IndexView.min.js index e840b24..ca02891 100644 --- a/kirby/panel/dist/js/IndexView.min.js +++ b/kirby/panel/dist/js/IndexView.min.js @@ -1 +1 @@ -import{n as e}from"./index.min.js";import"./vendor.min.js";const t=e({props:{categories:Array,info:String,tab:String}},(function(){var e=this,t=e._self._c;return t("k-panel-inside",{staticClass:"k-lab-index-view"},[t("k-header",[e._v("Lab")]),t("k-tabs",{attrs:{tab:e.tab,tabs:[{name:"examples",label:"Examples",link:"/lab"},{name:"docs",label:"Docs",link:"/lab/docs"}]}}),e.info?t("k-box",{attrs:{icon:"question",theme:"info",text:e.info,html:!0}}):e._e(),e._l(e.categories,(function(e){return t("k-section",{key:e.name,attrs:{headline:e.name}},[t("k-collection",{attrs:{items:e.examples,empty:{icon:e.icon,text:"Add examples to "+e.path}}})],1)}))],2)}),[]).exports;export{t as default}; +import{n as e}from"./index.min.js";import"vue";import"./vendor.min.js";const t=e({props:{categories:Array,info:String,tab:String},data:()=>({q:""}),computed:{filteredCategories(){if(!this.q)return this.categories;const e=this.$helper.object.clone(this.categories),t=this.q.toLowerCase();for(const n of e)n.examples=n.examples.filter(e=>e.text.toLowerCase().includes(t));return e.filter(e=>e.examples.length>0)}}},function(){var e=this,t=e._self._c;return t("k-panel-inside",{staticClass:"k-lab-index-view",scopedSlots:e._u([{key:"topbar",fn:function(){return[t("k-theme-view-button",{attrs:{text:null,variant:null,size:"xs"}})]},proxy:!0}])},[t("k-header",{scopedSlots:e._u([{key:"buttons",fn:function(){return[t("k-input",{attrs:{type:"search",icon:"search",placeholder:e.$t("filter")+" …",value:e.q},on:{input:function(t){e.q=t}}})]},proxy:!0}])},[e._v(" Lab ")]),t("k-tabs",{attrs:{tab:e.tab,tabs:[{name:"examples",label:"Examples",link:"/lab"},{name:"docs",label:"Docs",link:"/lab/docs"}]}}),e.info?t("k-box",{attrs:{icon:"question",theme:"info",text:e.info,html:!0}}):e._e(),e._l(e.filteredCategories,function(e){return t("k-section",{key:e.name,attrs:{headline:e.name}},[t("k-collection",{attrs:{items:e.examples,empty:{icon:e.icon,text:"Add examples to "+e.path}}})],1)})],2)},[]).exports;export{t as default}; diff --git a/kirby/panel/dist/js/PlaygroundView.min.js b/kirby/panel/dist/js/PlaygroundView.min.js index 50d4571..a636d70 100644 --- a/kirby/panel/dist/js/PlaygroundView.min.js +++ b/kirby/panel/dist/js/PlaygroundView.min.js @@ -1 +1 @@ -import{D as t}from"./Docs.min.js";import{n as e}from"./index.min.js";import"./vendor.min.js";const a=e({props:{docs:Object},emits:["cancel"],computed:{options(){const t=[{icon:"expand",link:"lab/docs/"+this.docs.component}];return this.docs.github&&t.unshift({icon:"github",link:this.docs.github,target:"_blank"}),t}}},(function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-form-drawer",attrs:{options:t.options},on:{submit:function(e){return t.$emit("cancel")}}},"k-drawer",t.$attrs,!1),[e("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)}),[]).exports;const o=e({props:{code:{type:Boolean,default:!0},label:String,flex:Boolean},data:()=>({mode:"preview"}),computed:{component(){return window.UiExamples[this.label]}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-example",attrs:{"data-flex":t.flex,tabindex:"0"}},[e("header",{staticClass:"k-lab-example-header"},[e("h3",{staticClass:"k-lab-example-label"},[t._v(t._s(t.label))]),t.code?e("k-button-group",{staticClass:"k-lab-example-inspector",attrs:{layout:"collapsed"}},[e("k-button",{attrs:{theme:"preview"===t.mode?"info":null,icon:"preview",size:"xs",title:"Preview"},on:{click:function(e){t.mode="preview"}}}),e("k-button",{attrs:{theme:"inspect"===t.mode?"info":null,icon:"code",size:"xs",title:"Vue code"},on:{click:function(e){t.mode="inspect"}}})],1):t._e()],1),"preview"===t.mode?e("div",{staticClass:"k-lab-example-canvas"},[t._t("default")],2):t._e(),"inspect"===t.mode?e("div",{staticClass:"k-lab-example-code"},[e("k-code",{attrs:{language:"html"}},[t._v(t._s(t.component))])],1):t._e()])}),[]).exports;const s=e({},(function(){return(0,this._self._c)("div",{staticClass:"k-lab-examples"},[this._t("default")],2)}),[]).exports;const n=e({methods:{submit(t){const e=Object.fromEntries(new FormData(t));this.$panel.dialog.open({component:"k-lab-output-dialog",props:{code:JSON.stringify(e,null,2)}})}}},(function(){var t=this,e=t._self._c;return e("form",{staticClass:"k-lab-form",on:{submit:function(e){return e.preventDefault(),t.submit(e.target)}}},[t._t("default"),e("footer",[e("k-button",{attrs:{type:"submit",icon:"check",theme:"positive",variant:"filled"}},[t._v(" Submit ")])],1)],2)}),[]).exports;const i=e({props:{code:String,language:{default:"js",type:String}},emits:["cancel"]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({attrs:{size:"large","cancel-button":!1,"submit-button":!1},on:{cancel:function(e){return t.$emit("cancel")}}},"k-dialog",t.$attrs,!1),[e("k-code",{attrs:{language:t.language}},[t._v(t._s(t.code))])],1)}),[]).exports;const l=e({},(function(){var t=this._self._c;return t("div",{staticClass:"k-table"},[t("table",[t("tbody",[t("tr",[t("td",{staticClass:"k-table-cell",attrs:{"data-mobile":"true"}},[this._t("default")],2)])])])])}),[]).exports;Vue.component("k-lab-docs",t),Vue.component("k-lab-docs-drawer",a),Vue.component("k-lab-example",o),Vue.component("k-lab-examples",s),Vue.component("k-lab-form",n),Vue.component("k-lab-output-dialog",i),Vue.component("k-lab-table-cell",l);const r=e({props:{compiler:Boolean,docs:String,examples:[Object,Array],file:String,github:String,props:[Object,Array],styles:String,tab:String,tabs:{type:Array,default:()=>[]},template:String,title:String},data:()=>({component:null}),watch:{tab:{handler(){this.createComponent()},immediate:!0}},mounted(){this.$panel.view.path.replace(/lab\//,"")},methods:{async createComponent(){if(!this.file)return;const{default:t}=await import(this.$panel.url(this.file)+"?cache="+Date.now());t.template=this.template,this.component={...t},window.UiExamples=this.examples},openDocs(){this.$panel.drawer.open(`lab/docs/${this.docs}`)},async reloadComponent(){await this.$panel.view.refresh(),this.createComponent()},reloadDocs(){this.$panel.drawer.isOpen&&this.$panel.drawer.refresh()}}},(function(){var t=this,e=t._self._c;return e("k-panel-inside",{staticClass:"k-lab-playground-view",attrs:{"data-has-tabs":t.tabs.length>1}},[e("k-header",{scopedSlots:t._u([{key:"buttons",fn:function(){return[t.docs||t.github?e("k-button-group",[t.docs?e("k-button",{attrs:{text:t.docs,icon:"book",size:"sm",variant:"filled"},on:{click:t.openDocs}}):t._e(),t.github?e("k-button",{attrs:{link:t.github,icon:"github",size:"sm",target:"_blank",variant:"filled"}}):t._e()],1):t._e()]},proxy:!0}])},[t._v(" "+t._s(t.title)+" ")]),e("k-tabs",{attrs:{tab:t.tab,tabs:t.tabs}}),!1===t.compiler?e("k-box",{attrs:{theme:"info"}},[t._v(" The Vue template compiler must be enabled to show lab examples ")]):[t.component?e(t.component,t._b({tag:"component"},"component",t.props,!1)):t._e(),t.styles?e("style",{tag:"component",domProps:{innerHTML:t._s(t.styles)}}):t._e()]],2)}),[]).exports;export{r as default}; +import t from"vue";import{D as e}from"./Docs.min.js";import{n as a}from"./index.min.js";import"./vendor.min.js";const o=a({props:{docs:Object},emits:["cancel"],computed:{options(){const t=[{icon:"expand",link:"lab/docs/"+this.docs.component}];return this.docs.github&&t.unshift({icon:"github",link:this.docs.github,target:"_blank"}),t}}},function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-form-drawer",attrs:{options:t.options},on:{submit:function(e){return t.$emit("cancel")}}},"k-drawer",t.$attrs,!1),[e("k-lab-docs",t._b({},"k-lab-docs",t.docs,!1))],1)},[]).exports;const s=a({props:{code:{type:Boolean,default:!0},label:String,flex:Boolean},data:()=>({mode:"preview"}),computed:{component(){return window.UiExamples[this.label]}}},function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-lab-example",attrs:{"data-flex":t.flex,tabindex:"0"}},[e("header",{staticClass:"k-lab-example-header"},[e("h3",{staticClass:"k-lab-example-label"},[t._v(t._s(t.label))]),t.code?e("k-button-group",{staticClass:"k-lab-example-inspector",attrs:{layout:"collapsed"}},[e("k-button",{attrs:{theme:"preview"===t.mode?"info":null,icon:"preview",size:"xs",title:"Preview"},on:{click:function(e){t.mode="preview"}}}),e("k-button",{attrs:{theme:"inspect"===t.mode?"info":null,icon:"code",size:"xs",title:"Vue code"},on:{click:function(e){t.mode="inspect"}}})],1):t._e()],1),"preview"===t.mode?e("div",{staticClass:"k-lab-example-canvas"},[t._t("default")],2):t._e(),"inspect"===t.mode?e("div",{staticClass:"k-lab-example-code"},[e("k-code",{attrs:{language:"html"}},[t._v(t._s(t.component))])],1):t._e()])},[]).exports;const n=a({},function(){return(0,this._self._c)("div",{staticClass:"k-lab-examples"},[this._t("default")],2)},[]).exports;const i=a({methods:{submit(t){const e=Object.fromEntries(new FormData(t));this.$panel.dialog.open({component:"k-lab-output-dialog",props:{code:JSON.stringify(e,null,2)}})}}},function(){var t=this,e=t._self._c;return e("form",{staticClass:"k-lab-form",on:{submit:function(e){return e.preventDefault(),t.submit(e.target)}}},[t._t("default"),e("footer",[e("k-button",{attrs:{type:"submit",icon:"check",theme:"positive",variant:"filled"}},[t._v(" Submit ")])],1)],2)},[]).exports;const l=a({props:{code:String,language:{default:"js",type:String}},emits:["cancel"]},function(){var t=this,e=t._self._c;return e("k-dialog",t._b({attrs:{size:"large","cancel-button":!1,"submit-button":!1},on:{cancel:function(e){return t.$emit("cancel")}}},"k-dialog",t.$attrs,!1),[e("k-code",{attrs:{language:t.language}},[t._v(t._s(t.code))])],1)},[]).exports;const r=a({},function(){var t=this._self._c;return t("div",{staticClass:"k-table"},[t("table",[t("tbody",[t("tr",[t("td",{staticClass:"k-table-cell",attrs:{"data-mobile":"true"}},[this._t("default")],2)])])])])},[]).exports;t.component("k-lab-docs",e),t.component("k-lab-docs-drawer",o),t.component("k-lab-example",s),t.component("k-lab-examples",n),t.component("k-lab-form",i),t.component("k-lab-output-dialog",l),t.component("k-lab-table-cell",r);const c=a({props:{buttons:Array,compiler:Boolean,docs:String,examples:[Object,Array],file:String,github:String,props:[Object,Array],styles:String,tab:String,tabs:{type:Array,default:()=>[]},template:String,title:String},data:()=>({component:null}),watch:{tab:{handler(){this.createComponent()},immediate:!0}},mounted(){this.$panel.view.path.replace(/lab\//,"")},methods:{async createComponent(){if(!this.file)return;const{default:t}=await import(this.$panel.url(this.file)+"?cache="+Date.now());t.template=this.template,this.component={...t},window.UiExamples=this.examples},async reloadComponent(){await this.$panel.view.refresh(),this.createComponent()},reloadDocs(){this.$panel.drawer.isOpen&&this.$panel.drawer.refresh()}}},function(){var t=this,e=t._self._c;return e("k-panel-inside",{staticClass:"k-lab-playground-view",scopedSlots:t._u([{key:"topbar",fn:function(){return[e("k-theme-view-button",{attrs:{text:null,variant:null,size:"xs"}})]},proxy:!0}])},[e("k-header",{staticClass:"k-lab-playground-header",scopedSlots:t._u([{key:"buttons",fn:function(){return[e("k-view-buttons",{attrs:{buttons:t.buttons}})]},proxy:!0}])},[t._v(" "+t._s(t.title)+" ")]),e("k-tabs",{attrs:{tab:t.tab,tabs:t.tabs}}),!1===t.compiler?e("k-box",{attrs:{theme:"info"}},[t._v(" The Vue template compiler must be enabled to show lab examples ")]):[t.component?e(t.component,t._b({tag:"component"},"component",t.props,!1)):t._e(),t.styles?e("style",{tag:"component",domProps:{innerHTML:t._s(t.styles)}}):t._e()]],2)},[]).exports;export{c as default}; diff --git a/kirby/panel/dist/js/container-query-polyfill.modern.min.js b/kirby/panel/dist/js/container-query-polyfill.modern.min.js deleted file mode 100644 index 7053dd7..0000000 --- a/kirby/panel/dist/js/container-query-polyfill.modern.min.js +++ /dev/null @@ -1 +0,0 @@ -function e(){return e=Object.assign?Object.assign.bind():function(e){for(var t=1;t0?{type:2,value:n/r}:{type:1};case 6:return null!=n&&null!=r?{type:4,value:r>=n?"portrait":"landscape"}:{type:1}}}function n(e,t){switch(e.type){case 1:case 2:case 3:case 4:return i(e,t);case 5:{const n=t.sizeFeatures.get(e.feature);return null==n?{type:1}:n}case 6:return e.value}}function r(e){return{type:5,value:e}}function u(e,t,n){return r(function(e,t,n){switch(n){case 1:return e===t;case 2:return e>t;case 3:return e>=t;case 4:return ee*t))}return null}function c(e,t){switch(e.type){case 2:return 0===e.value?0:null;case 3:return l(e,t)}return null}function i(e,t){switch(e.type){case 4:return function(e,t){const o=n(e.left,t),s=n(e.right,t),l=e.operator;if(4===o.type&&4===s.type||5===o.type&&5===s.type)return i=o,a=s,1===l?r(i.value===a.value):{type:1};var i,a;if(3===o.type||3===s.type){const e=c(o,t),n=c(s,t);if(null!=e&&null!=n)return u(e,n,l)}else if(2===o.type&&2===s.type)return u(o.value,s.value,l);return{type:1}}(e,t);case 2:return function(e,t){const n=i(e.left,t);return 5!==n.type||!0!==n.value?n:i(e.right,t)}(e,t);case 3:return function(e,t){const n=i(e.left,t);return 5===n.type&&!0===n.value?n:i(e.right,t)}(e,t);case 1:{const n=i(e.value,t);return 5===n.type?{type:5,value:!n.value}:{type:1}}case 5:return a(n(e,t));case 6:return a(e.value)}}function a(e){switch(e.type){case 5:return e;case 2:case 3:return{type:5,value:e.value>0}}return{type:1}}const f=Array.from({length:4},(()=>Math.floor(256*Math.random()).toString(16))).join(""),p=S("container"),y=S("container-type"),h=S("container-name"),v=`data-cqs-${f}`,d=`data-cqc-${f}`,m=S("cqw"),w=S("cqh"),g=S("cqi"),b=S("cqb");function S(e){return`--cq-${e}-${f}`}const x=Symbol();function q(e,t){const n={value:t,errorIndices:[],index:-1,at(r){const u=n.index+r;return u>=e.length?t:e[u]},consume:e=>(n.index+=e,n.value=n.at(0),n.value),reconsume(){n.index-=1},error(){n.errorIndices.push(n.index)}};return n}function C(e){return q(e,{type:0})}function*$(e){const t=[];let n=!1;for(const b of e){const e=b.codePointAt(0);n&&10!==e&&(n=!1,t.push(10)),0===e||e>=55296&&e<=57343?t.push(65533):13===e?n=!0:t.push(e)}const r=q(t,-1),{at:u,consume:o,error:s,reconsume:l}=r;function c(){return String.fromCodePoint(r.value)}function i(){return{type:13,value:c()}}function a(){for(;z(u(1));)o(1)}function f(){for(;-1!==r.value;)if(o(1),42===u(0)&&47===u(1))return void o(1);s()}function p(){const[e,t]=function(){let e=0,t="",n=u(1);for(43!==n&&45!==n||(o(1),t+=c());k(u(1));)o(1),t+=c();if(46===u(1)&&k(u(2)))for(e=1,o(1),t+=c();k(u(1));)o(1),t+=c();if(n=u(1),69===n||101===n){const n=u(2);if(k(n))for(e=1,o(1),t+=c();k(u(1));)o(1),t+=c();else if((45===n||43===n)&&k(u(3)))for(e=1,o(1),t+=c(),o(1),t+=c();k(u(1));)o(1),t+=c()}return[t,e]}(),n=u(1);return d(n,u(1),u(2))?{type:15,value:e,flag:t,unit:w()}:37===n?(o(1),{type:16,value:e}):{type:17,value:e,flag:t}}function y(){const e=w();let t=u(1);if("url"===e.toLowerCase()&&40===t){for(o(1);z(u(1))&&z(u(2));)o(1);t=u(1);const n=u(2);return 34===t||39===t?{type:23,value:e}:!z(t)||34!==n&&39!==n?function(){let e="";for(a();;){const n=o(1);if(41===n)return{type:20,value:e};if(-1===n)return s(),{type:20,value:e};if(z(n)){a();const t=u(1);return 41===t||-1===t?(o(1),-1===n&&s(),{type:20,value:e}):(g(),{type:21})}if(34===n||39===n||40===n||(t=n)>=0&&t<=8||11===t||t>=14&&t<=31||127===t)return s(),g(),{type:21};if(92===n){if(!j(n,u(1)))return s(),{type:21};e+=v()}else e+=c()}var t}():{type:23,value:e}}return 40===t?(o(1),{type:23,value:e}):{type:24,value:e}}function h(e){let t="";for(;;){const n=o(1);if(-1===n||n===e)return-1===n&&s(),{type:2,value:t};if(E(n))return s(),l(),{type:3};if(92===n){const e=u(1);if(-1===e)continue;E(e)?o(1):t+=v()}else t+=c()}}function v(){const e=o(1);if(A(e)){const t=[e];for(let e=0;e<5;e++){const e=u(1);if(!A(e))break;t.push(e),o(1)}z(u(1))&&o(1);let n=parseInt(String.fromCodePoint(...t),16);return(0===n||n>=55296&&n<=57343||n>1114111)&&(n=65533),String.fromCodePoint(n)}return-1===e?(s(),String.fromCodePoint(65533)):c()}function d(e,t,n){return 45===e?L(t)||45===t||j(t,n):!!L(e)}function m(e,t,n){return 43===e||45===e?k(t)||46===t&&k(n):!(46!==e||!k(t))||!!k(e)}function w(){let e="";for(;;){const t=o(1);if(M(t))e+=c();else{if(!j(t,u(1)))return l(),e;e+=v()}}}function g(){for(;;){const e=o(1);if(-1===e)return;j(e,u(1))&&v()}}for(;;){const e=o(1);if(47===e&&42===u(1))o(2),f();else if(z(e))a(),yield{type:1};else if(34===e)yield h(e);else if(35===e){const e=u(1);M(e)||j(e,u(2))?yield{type:14,flag:d(u(1),u(2),u(3))?1:0,value:w()}:yield i()}else if(39===e)yield h(e);else if(40===e)yield{type:4};else if(41===e)yield{type:5};else if(43===e)m(e,u(1),u(2))?(l(),yield p()):yield i();else if(44===e)yield{type:6};else if(45===e){const t=u(1),n=u(2);m(e,t,n)?(l(),yield p()):45===t&&62===n?(o(2),yield{type:19}):d(e,t,n)?(l(),yield y()):yield i()}else if(46===e)m(e,u(1),u(2))?(l(),yield p()):yield i();else if(58===e)yield{type:7};else if(59===e)yield{type:8};else if(60===e)33===u(1)&&45===u(2)&&45===u(3)?yield{type:18}:yield i();else if(64===e)if(d(u(1),u(2),u(3))){const e=w();yield{type:22,value:e}}else yield i();else if(91===e)yield{type:9};else if(92===e)j(e,u(1))?(l(),yield y()):(s(),yield i());else if(93===e)yield{type:10};else if(123===e)yield{type:11};else if(125===e)yield{type:12};else if(k(e))l(),yield p();else if(L(e))l(),yield y();else{if(-1===e)return yield{type:0},r.errorIndices;yield{type:13,value:c()}}}}function k(e){return e>=48&&e<=57}function A(e){return k(e)||e>=65&&e<=70||e>=97&&e<=102}function E(e){return 10===e||13===e||12===e}function z(e){return E(e)||9===e||32===e}function L(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128||95===e}function j(e,t){return 92===e&&!E(t)}function M(e){return L(e)||k(e)||45===e}const T={11:12,9:10,4:5};function P(t,n){const r=function(e,t){const n=[];for(;;)switch(e.consume(1).type){case 1:break;case 0:return{type:3,value:n};case 18:case 19:if(!1!==t){e.reconsume();const t=U(e);t!==x&&n.push(t)}break;case 22:e.reconsume(),n.push(F(e));break;default:{e.reconsume();const t=U(e);t!==x&&n.push(t);break}}}(C(t),!0===n);return e({},r,{value:r.value.map((t=>{return 26===t.type?0===(n=t).value.value.type?e({},n,{value:e({},n.value,{value:(r=n.value.value.value,function(e){const t=[],n=[];for(;;){const r=e.consume(1);switch(r.type){case 1:case 8:break;case 0:return{type:1,value:[...n,...t]};case 22:e.reconsume(),t.push(F(e));break;case 24:{const t=[r];let u=e.at(1);for(;8!==u.type&&0!==u.type;)t.push(I(e)),u=e.at(1);const o=R(C(t));o!==x&&n.push(o);break}case 13:if("&"===r.value){e.reconsume();const n=U(e);n!==x&&t.push(n);break}default:{e.error(),e.reconsume();let t=e.at(1);for(;8!==t.type&&0!==t.type;)I(e),t=e.at(1);break}}}}(C(r)))})}):n:t;var n,r}))})}function N(e){const t=C(e),n=[];for(;;){if(0===t.consume(1).type)return n;t.reconsume(),n.push(I(t))}}function O(e){for(;1===e.at(1).type;)e.consume(1)}function F(e){let t=e.consume(1);if(22!==t.type)throw new Error(`Unexpected type ${t.type}`);const n=t.value,r=[];for(;;)switch(t=e.consume(1),t.type){case 8:return{type:25,name:n,prelude:r,value:null};case 0:return e.error(),{type:25,name:n,prelude:r,value:null};case 11:return{type:25,name:n,prelude:r,value:Q(e)};case 28:if(11===t.source.type)return{type:25,name:n,prelude:r,value:t};default:e.reconsume(),r.push(I(e))}}function U(e){let t=e.value;const n=[];for(;;)switch(t=e.consume(1),t.type){case 0:return e.error(),x;case 11:return{type:26,prelude:n,value:Q(e)};case 28:if(11===t.source.type)return{type:26,prelude:n,value:t};default:e.reconsume(),n.push(I(e))}}function R(e){const t=e.consume(1);if(24!==t.type)throw new Error(`Unexpected type ${t.type}`);const n=t.value,r=[];let u=!1;if(O(e),7!==e.at(1).type)return e.error(),x;for(e.consume(1),O(e);0!==e.at(1).type;)r.push(I(e));const o=r[r.length-2],s=r[r.length-1];return o&&13===o.type&&"!"===o.value&&24===s.type&&"important"===s.value.toLowerCase()&&(u=!0,r.splice(r.length-2)),{type:29,name:n,value:r,important:u}}function I(e){const t=e.consume(1);switch(t.type){case 11:case 9:case 4:return Q(e);case 23:return function(e){let t=e.value;if(23!==t.type)throw new Error(`Unexpected type ${t.type}`);const n=t.value,r=[];for(;;)switch(t=e.consume(1),t.type){case 5:return{type:27,name:n,value:r};case 0:return e.error(),{type:27,name:n,value:r};default:e.reconsume(),r.push(I(e))}}(e);default:return t}}function Q(e){let t=e.value;const n=t,r=T[n.type];if(!r)throw new Error(`Unexpected type ${t.type}`);const u=[];for(;;)switch(t=e.consume(1),t.type){case r:return{type:28,source:n,value:{type:0,value:u}};case 0:return e.error(),{type:28,source:n,value:{type:0,value:u}};default:e.reconsume(),u.push(I(e))}}function H(e){return O(e),0===e.at(1).type}const V={11:["{","}"],9:["[","]"],4:["(",")"]};function D(e,t){switch(e.type){case 25:return`@${CSS.escape(e.name)} ${e.prelude.map((e=>D(e))).join("")}${e.value?D(e.value):";"}`;case 26:return`${e.prelude.map((e=>D(e))).join("")}${D(e.value)}`;case 28:{const[t,n]=V[e.source.type];return`${t}${W(e.value)}${n}`}case 27:return`${CSS.escape(e.name)}(${e.value.map((e=>D(e))).join("")})`;case 29:return`${CSS.escape(e.name)}:${e.value.map((e=>D(e))).join("")}${e.important?" !important":""}`;case 1:return" ";case 8:return";";case 7:return":";case 14:return"#"+CSS.escape(e.value);case 24:return CSS.escape(e.value);case 15:return e.value+CSS.escape(e.unit);case 13:case 17:return e.value;case 2:return`"${CSS.escape(e.value)}"`;case 6:return",";case 20:return"url("+CSS.escape(e.value)+")";case 22:return"@"+CSS.escape(e.value);case 16:return e.value+"%";default:throw new Error(`Unsupported token ${e.type}`)}}function W(e,t){return e.value.map((t=>{let n=D(t);return 29===t.type&&0!==e.type&&(n+=";"),n})).join("")}function _(e){return D(e)}function B(e){const t=e.at(1);return 13===t.type&&"="===t.value&&(e.consume(1),!0)}function G(e,t){const n=[];for(;;){const r=e.at(1);if(0===r.type||t&&7===r.type||13===r.type&&(">"===r.value||"<"===r.value||"="===r.value))break;n.push(e.consume(1))}return n}function Y(e){O(e);const t=e.consume(1);return 13!==t.type?x:">"===t.value?B(e)?3:2:"<"===t.value?B(e)?5:4:"="===t.value?1:x}function J(e){return 4===e||5===e}function K(e){return 2===e||3===e}function X(e,t,n){const r=function(e){O(e);const t=e.consume(1);return O(e),24!==t.type||0!==e.at(1).type?x:t.value}(C(e));if(r===x)return x;let u=r.toLowerCase();return u=n?n(u):u,t.has(u)?u:x}function Z(e){return{type:13,value:e}}function ee(e,t){return{type:29,name:e,value:t,important:!1}}function te(e){return{type:24,value:e}}function ne(e,t){return{type:27,name:e,value:t}}function re(e){return ne("var",[te(e)])}function ue(e,t){O(e);let n=!1,r=e.at(1);if(24===r.type){if("not"!==r.value.toLowerCase())return x;e.consume(1),O(e),n=!0}let u=function(e){const t=e.consume(1);switch(t.type){case 28:{if(4!==t.source.type)return x;const e=ue(C(t.value.value),null);return e!==x?e:{type:4,value:t}}case 27:return{type:4,value:t};default:return x}}(e);if(u===x)return x;u=n?{type:1,value:u}:u,O(e),r=e.at(1);const o=24===r.type?r.value.toLowerCase():null;if(null!==o){if(e.consume(1),O(e),"and"!==o&&"or"!==o||null!==t&&o!==t)return x;const n=ue(e,o);return n===x?x:{type:"and"===o?2:3,left:u,right:n}}return H(e)?u:x}function oe(e){return ue(e,null)}function se(e){switch(e.type){case 1:return[te("not"),{type:1},...se(e.value)];case 2:case 3:return[...se(e.left),{type:1},te(2===e.type?"and":"or"),{type:1},...se(e.right)];case 4:return[e.value]}}const le={width:1,height:2,"inline-size":3,"block-size":4,"aspect-ratio":5,orientation:6},ce=new Set(Object.keys(le)),ie=new Set(["none","and","not","or","normal","auto"]),ae=new Set(["initial","inherit","revert","revert-layer","unset"]),fe=new Set(["size","inline-size"]);function pe(e,t,n,r){const u=n();if(u===x)return x;let o=[u,null];O(e);const s=e.at(1);if(13===s.type){if(s.value!==t)return x;e.consume(1),O(e);const n=r();O(e),n!==x&&(o=[u,n])}return H(e)?o:x}function ye(e){const t=e.consume(1);return 17===t.type?parseInt(t.value):x}function he(e){const t=C(e);O(t);const n=t.consume(1);let r=x;switch(n.type){case 17:t.reconsume(),r=function(e){const t=pe(e,"/",(()=>ye(e)),(()=>ye(e)));return t===x?x:{type:2,value:t[0]/(null!==t[1]?t[1]:1)}}(t);break;case 15:r={type:3,value:parseInt(n.value),unit:n.unit.toLowerCase()};break;case 24:{const e=n.value.toLowerCase();switch(e){case"landscape":case"portrait":r={type:4,value:e}}}}return r===x?x:H(t)?{type:6,value:r}:x}function ve(e){return!we(e=e.toLowerCase())&&!ie.has(e)}function de(e,t){const n=[];for(;;){O(e);const r=e.at(1);if(24!==r.type||!t(r.value))return n;e.consume(1),n.push(r.value)}}function me(e){const t=[];for(;;){O(e);const n=e.at(1);if(24!==n.type)break;const r=n.value;if(!ve(r))break;e.consume(1),t.push(r)}return t}function we(e){return ae.has(e)}function ge(e){return e.map((e=>"cq-"+e))}function be(e){const t=de(e,(e=>we(e)));return 1===t.length?ge(t):x}function Se(e,t){const n=de(e,(e=>"none"===e));if(1===n.length)return ge(n);if(0!==n.length)return x;if(t){const t=be(e);if(t!==x)return t}const r=me(e);return r.length>0&&(!t||H(e))?r:x}function xe(e,t){if(t){const t=be(e);if(t!==x)return t}return function(e){const t=de(e,(e=>"normal"===e));if(1===t.length)return ge(t);if(0!==t.length)return x;const n=de(e,(e=>fe.has(e)));return n.length>0&&H(e)?n:x}(e)}function qe(e){const t=C(e),n=be(t);if(n!==x)return[n,n];const r=pe(t,"/",(()=>Se(t,!1)),(()=>xe(t,!1)));return r!==x&&H(t)?[r[0],r[1]||[]]:x}function Ce(e){const t=C(e),n=me(t);if(!n||n.length>1)return x;const r=oe(t);if(r===x)return x;const u={features:new Set},o=$e(r,u);return H(t)?{name:n.length>0?n[0]:null,condition:o,features:u.features}:x}function $e(e,t){switch(e.type){case 1:return{type:1,value:$e(e.value,t)};case 2:case 3:return{type:2===e.type?2:3,left:$e(e.left,t),right:$e(e.right,t)};case 4:if(28===e.value.type){const n=function(e,t){const n=function(e,t){const n=G(e,!0),r=e.at(1);if(0===r.type){const e=X(n,t);return e!==x&&t.has(e)?{type:1,feature:e}:x}if(7===r.type){e.consume(1);const r=G(e,!1);let u=1;const o=X(n,t,(e=>e.startsWith("min-")?(u=3,e.substring(4)):e.startsWith("max-")?(u=5,e.substring(4)):e));return o!==x?{type:2,feature:o,bounds:[null,[u,r]]}:x}const u=Y(e);if(u===x)return x;const o=G(e,!1);if(0===e.at(1).type){const e=X(n,t);if(e!==x)return{type:2,feature:e,bounds:[null,[u,o]]};const r=X(o,t);return r!==x?{type:2,feature:r,bounds:[[u,n],null]}:x}const s=Y(e);if(s===x||!(K(u)&&K(s)||J(u)&&J(s)))return x;const l=G(e,!1),c=X(o,t);return c!==x?{type:2,feature:c,bounds:[[u,n],[s,l]]}:x}(e,ce);if(n===x)return x;const r=le[n.feature];if(null==r)return x;if(t.features.add(r),1===n.type)return{type:5,feature:r};{const e={type:5,feature:r};let t=x;if(null!==n.bounds[0]){const r=he(n.bounds[0][1]);if(r===x)return x;t={type:4,operator:n.bounds[0][0],left:r,right:e}}if(null!==n.bounds[1]){const r=he(n.bounds[1][1]);if(r===x)return x;const u={type:4,operator:n.bounds[1][0],left:e,right:r};t=t!==x?{type:2,left:t,right:u}:u}return t}}(C(e.value.value.value),t);if(n!==x)return n}return{type:6,value:{type:1}}}}let ke=0;const Ae={cqw:m,cqh:w,cqi:g,cqb:b},Ee=CSS.supports("selector(:where(div))"),ze=":not(.container-query-polyfill)";N(Array.from($(ze)));const Le=document.createElement("div"),je=new Set(["before","after","first-line","first-letter"]);function Me(e,t){return ne("calc",[{type:17,flag:e.flag,value:e.value},Z("*"),t])}function Te(t){return t.map((t=>{switch(t.type){case 15:return function(e){const t=e.unit,n=Ae[t];return null!=n?Me(e,re(n)):"cqmin"===t||"cqmax"===t?Me(e,ne(e.unit.slice(2),[re(g),{type:6},re(b)])):e}(t);case 27:return e({},t,{value:Te(t.value)})}return t}))}function Pe(t){switch(t.name){case"container":return qe(t.value)?e({},t,{name:p}):t;case"container-name":return Se(C(t.value),!0)?e({},t,{name:h}):t;case"container-type":return null!=xe(C(t.value),!0)?e({},t,{name:y}):t}return e({},t,{value:Te(t.value)})}function Ne(t,n){return e({},t,{value:t.value.map((t=>{switch(t.type){case 25:return Qe(t,n);case 26:return r=t,(u=n).transformStyleRule(e({},r,{value:Ue(r.value,u)}));default:return t}var r,u}))})}function Oe(e){return 0===e.type||6===e.type}function Fe(e){for(let t=e.length-1;t>=0;t--)if(1!==e[t].type)return e.slice(0,t+1);return e}function Ue(t,n){return function(t,n){const r=[];let u=null,o=null;for(const e of t.value.value)switch(e.type){case 25:{const t=n?n(e):e;t&&r.push(t)}break;case 29:{const t=Pe(e);switch(t.name){case p:{const t=qe(e.value);t!==x&&(u=t[0],o=t[1]);break}case h:{const t=Se(C(e.value),!0);t!==x&&(u=t);break}case y:{const t=xe(C(e.value),!0);t!==x&&(o=t);break}default:r.push(t)}}}return u&&u.length>0&&r.push(ee(h,[te(u.join(" "))])),o&&o.length>0&&r.push(ee(y,[te(o.join(" "))])),e({},t,{value:{type:2,value:r}})}(t,(e=>Qe(e,n)))}function Re(t){if(1===t.type)return e({},t,{value:Re(t.value)});if(2===t.type||3===t.type)return e({},t,{left:Re(t.left),right:Re(t.right)});if(4===t.type&&28===t.value.type){const n=function(e){const t=C(e);return O(t),24!==t.at(1).type?x:R(t)||x}(t.value.value.value);if(n!==x)return e({},t,{value:e({},t.value,{value:{type:0,value:[Pe(n)]}})})}return t}function Ie(t,n){let r=oe(C(t.prelude));return r=r!==x?Re(r):x,e({},t,{prelude:r!==x?se(r):t.prelude,value:t.value?e({},t.value,{value:Ne(P(t.value.value.value),n)}):null})}function Qe(t,n){switch(t.name.toLocaleLowerCase()){case"media":case"layer":return u=n,e({},r=t,{value:r.value?e({},r.value,{value:Ne(P(r.value.value.value),u)}):null});case"keyframes":return function(t,n){let r=null;return t.value&&(r=e({},t.value,{value:{type:3,value:P(t.value.value.value).value.map((t=>{switch(t.type){case 26:return u=n,e({},r=t,{value:Ue(r.value,u)});case 25:return Qe(t,n)}var r,u}))}})),e({},t,{value:r})}(t,n);case"supports":return Ie(t,n);case"container":return function(t,n){if(t.value){const r=Ce(t.prelude);if(r!==x){const u={rule:r,selector:null,parent:n.parent,uid:"c"+ke++},o=new Set,s=[],l=Ne(P(t.value.value.value),{descriptors:n.descriptors,parent:u,transformStyleRule:t=>{const[n,r]=function(e,t){const n=C(e),r=[],u=[];for(;;){if(0===n.at(1).type)return[r,u];const c=Math.max(0,n.index);for(;o=n.at(1),l=n.at(2),!(Oe(o)||7===o.type&&(7===l.type||24===l.type&&je.has(l.value.toLowerCase())));)n.consume(1);const i=n.index+1,a=e.slice(c,i),f=a.length>0?Fe(a):[Z("*")];for(;!Oe(n.at(1));)n.consume(1);const p=e.slice(i,Math.max(0,n.index+1));let y=f,h=[{type:28,source:{type:9},value:{type:0,value:[te(p.length>0?v:d),Z("~"),Z("="),{type:2,value:t}]}}];if(Ee)h=[Z(":"),ne("where",h)];else{const e=f.map(_).join("");e.endsWith(ze)?y=N(Array.from($(e.substring(0,e.length-31)))):s.push({actual:e,expected:e+ze})}r.push(...f),u.push(...y),u.push(...h),u.push(...p),n.consume(1)}var o,l}(t.prelude,u.uid);if(s.length>0)return t;const l=n.map(_).join("");try{Le.matches(l),o.add(l)}catch(c){}return e({},t,{prelude:r})}}).value;if(s.length>0){const e=new Set,t=[];let n=0;for(const{actual:u}of s)n=Math.max(n,u.length);const r=Array.from({length:n},(()=>" ")).join("");for(const{actual:u,expected:o}of s)e.has(u)||(t.push(`${u}${r.substring(0,n-u.length)} => ${o}`),e.add(u));console.warn(`The :where() pseudo-class is not supported by this browser. To use the Container Query Polyfill, you must modify the selectors under your @container rules:\n\n${t.join("\n")}`)}return o.size>0&&(u.selector=Array.from(o).join(", ")),n.descriptors.push(u),{type:25,name:"media",prelude:[te("all")],value:e({},t.value,{value:{type:3,value:l}})}}}return t}(t,n)}var r,u;return t}class He{constructor(e){this.value=void 0,this.value=e}}function Ve(e,t){if(e===t)return!0;if(typeof e==typeof t&&null!==e&&null!==t&&"object"==typeof e){if(Array.isArray(e)){if(!Array.isArray(t)||t.length!==e.length)return!1;for(let n=0,r=e.length;nthis.styles.getPropertyValue(e)));this.context.viewportChanged({width:e.width,height:e.height})}}function nt(e){const t=new AbortController;return e(t.signal).catch((e=>{if(!(e instanceof DOMException&&"AbortError"===e.message))throw e})),t}function rt(e){let t=0;if(0===e.length)return t;if(e.startsWith("cq-")&&("normal"===(e=e.substring(3))||we(e)))return t;const n=e.split(" ");for(const r of n)switch(r){case"size":t|=3;break;case"inline-size":t|=1;break;default:return 0}return t}function ut(e){let t=0;return"none"!==e&&(t|=1,"contents"===e||"inline"===e||Je.test(e)||(t|=2)),t}function ot(e,t){return parseFloat(e(t))}function st(e,t){return t.reduce(((t,n)=>t+ot(e,n)),0)}function lt(e){let t=0,n=0;return"border-box"===e("box-sizing")&&(t=st(e,Ge),n=st(e,Ye)),{fontSize:ot(e,"font-size"),width:ot(e,"width")-t,height:ot(e,"height")-n}}function ct(e){return{containerType:rt(e(y).trim()),containerNames:(n=e(h).trim(),n.startsWith("cq-")&&("none"===(n=n.substring(3))||we(n))?new Set([]):new Set(0===n.length?[]:n.split(" "))),writingAxis:(t=e("writing-mode").trim(),Be.has(t)?1:0),displayFlags:ut(e("display").trim())};var t,n}function it(e,t,n){null!=n?n!=e.getPropertyValue(t)&&e.setProperty(t,n):e.removeProperty(t)}function at(e){const t=e[We];return null!=t?t:[]}function ft(e,t){e[We]=t}new Promise((e=>{})),window.CQPolyfill={version:"1.0.2"},"container"in document.documentElement.style||function(){function n(e){return e[De]||null}const r=document.documentElement;if(n(r))return;const u=document.createElement(`cq-polyfill-${f}`),o=document.createElement("style");new MutationObserver((e=>{for(const t of e){for(const e of t.removedNodes){const t=n(e);null==t||t.disconnect()}t.target.nodeType!==Node.DOCUMENT_NODE&&t.target.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&null===t.target.parentNode||"attributes"===t.type&&t.attributeName&&(t.attributeName===v||t.attributeName===d||t.target instanceof Element&&t.target.getAttribute(t.attributeName)===t.oldValue)||(k(t.target).mutate(),h())}})).observe(r,{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0});const s=new ResizeObserver((e=>{for(const t of e)k(t.target).resize();k(r).update(q())})),l=new Ke(r);async function c(e,{source:t,url:n,signal:u}){const o=function(e,t){try{const n=Array.from($(e));if(t)for(let e=0;ee};return{source:W(Ne(P(n,!0),r)),descriptors:r.descriptors}}catch(n){return console.warn("An error occurred while transpiling stylesheet: "+n),{source:e,descriptors:[]}}}(t,n?n.toString():void 0);let s=()=>{},l=()=>{};const c=k(r);let i=!1;return null!=u&&u.aborted||(l=()=>{if(!i){const{sheet:t}=e;null!=t&&(ft(t,o.descriptors),i=!0,s=()=>{ft(t),c.mutate(),h()},c.mutate(),h())}}),{source:o.source,dispose:s,refresh:l}}const a={cqw:null,cqh:null};function p({width:e,height:t}){a.cqw=e,a.cqh=t}function y(e,t,n){if(e instanceof Element&&t){let r="";for(const[n,u]of t.conditions){const t=n.value;null!=t.selector&&null!=u&&!(2&~u)&&e.matches(t.selector)&&(r.length>0&&(r+=" "),r+=t.uid)}r.length>0?e.setAttribute(n,r):e.removeAttribute(n)}}function h(){s.unobserve(r),s.observe(r)}const S=()=>{const e=[];for(const t of document.styleSheets)for(const n of at(t))e.push([new He(n),0]);return e},x=window.getComputedStyle(r),q=()=>{const t=e=>x.getPropertyValue(e),n=ct(t),r=lt(t);return{parentState:null,conditions:S(),context:e({},a,{fontSize:r.fontSize,rootFontSize:r.fontSize,writingAxis:n.writingAxis}),displayFlags:n.displayFlags,isQueryContainer:!1}},C=e=>e;function k(a){let f=n(a);if(!f){let h,S=null,x=!1;a===r?(h=l,S=C):a===u?(x=!0,h=new tt(u,{viewportChanged:p})):h=a===o?new et(o):a instanceof HTMLLinkElement?new Xe(a,{registerStyleSheet:t=>c(a,e({},t))}):a instanceof HTMLStyleElement?new Ze(a,{registerStyleSheet:t=>c(a,e({},t))}):new Ke(a);let q=Symbol();if(null==S&&a instanceof Element){const n=function(n){const r=window.getComputedStyle(n);return function(){let n=null;return(...u)=>{if(null==n||!Ve(n[0],u)){const o=(n=>{const{context:u,conditions:o}=n,s=e=>r.getPropertyValue(e),l=ct(s),c=e({},u,{writingAxis:l.writingAxis});let a=o,f=!1,p=l.displayFlags;!(1&n.displayFlags)&&(p=0);const{containerType:y,containerNames:h}=l;if(y>0){const e=y>0&&!(2&~p),n=new Map(o.map((e=>[e[0].value,e[1]])));if(a=[],f=!0,e){const e=lt(s);c.fontSize=e.fontSize;const r=function(e,t){const n={value:t.width},r={value:t.height};let u=n,o=r;if(1===e.writingAxis){const e=u;u=o,o=e}return!!(2&~e.containerType)&&(o.value=void 0),{width:n.value,height:r.value,inlineSize:u.value,blockSize:o.value}}(l,e),f={sizeFeatures:r,treeContext:c},p=e=>{const{rule:r}=e,u=r.name,o=null==u||h.has(u)?function(e,n){const r=new Map,u=n.sizeFeatures;for(const s of e.features){const e=t(s,u);if(1===e.type)return null;r.set(s,e)}const o=i(e.condition,{sizeFeatures:r,treeContext:n.treeContext});return 5===o.type?o.value:null}(r,f):null;var s;return null==o?1===((null!=(s=n.get(e))?s:0)&&1):!0===o},y=(e,t)=>{let n=e.get(t);if(null==n){const r=p(t);n=(r?1:0)|(!0!==r||null!=t.parent&&1&~y(e,t.parent)?0:2),e.set(t,n)}return n},v=new Map;for(const t of o)a.push([t[0],y(v,t[0].value)]);c.cqw=null!=r.width?r.width/100:u.cqw,c.cqh=null!=r.height?r.height/100:u.cqh}}return{parentState:new He(n),conditions:a,context:c,displayFlags:p,isQueryContainer:f}})(...u);null!=n&&Ve(n[1],o)||(n=[u,o])}return n[1]}}()}(a);S=e=>n(e,q)}const $=S||C;let A=null;const E=e=>{const t=A,n=$(e);return A=n,[A,A!==t]},z=a instanceof HTMLElement||a instanceof SVGElement?a.style:null;let L=!1;f={connect(){for(let e=a.firstChild;null!=e;e=e.nextSibling)k(e);h.connected()},disconnect(){a instanceof Element&&(s.unobserve(a),a.removeAttribute(v),a.removeAttribute(d)),z&&(z.removeProperty(g),z.removeProperty(b),z.removeProperty(m),z.removeProperty(w));for(let e=a.firstChild;null!=e;e=e.nextSibling){const t=n(e);null==t||t.disconnect()}h.disconnected(),delete a[De]},update(e){const[t,n]=E(e);if(n){if(y(a,e,d),y(a,t,v),a instanceof Element){const e=x||t.isQueryContainer;e&&!L?(s.observe(a),L=!0):!e&&L&&(s.unobserve(a),L=!1)}if(z){const n=t.context,r=n.writingAxis;let u=null,o=null,s=null,l=null;(r!==e.context.writingAxis||t.isQueryContainer)&&(u=`var(${0===r?m:w})`,o=`var(${1===r?m:w})`),e&&!t.isQueryContainer||(n.cqw&&(s=n.cqw+"px"),n.cqh&&(l=n.cqh+"px")),it(z,g,u),it(z,b,o),it(z,m,s),it(z,w,l)}h.updated()}for(let r=a.firstChild;null!=r;r=r.nextSibling)k(r).update(t)},resize(){q=Symbol()},mutate(){q=Symbol();for(let e=a.firstChild;null!=e;e=e.nextSibling)k(e).mutate()}},a[De]=f,f.connect()}return f}r.prepend(o,u),k(r),h()}(); diff --git a/kirby/panel/dist/js/index.min.js b/kirby/panel/dist/js/index.min.js index ba0b3a1..c0dd8a0 100644 --- a/kirby/panel/dist/js/index.min.js +++ b/kirby/panel/dist/js/index.min.js @@ -1,2 +1,2 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./IndexView.min.js","./vendor.min.js","./DocsView.min.js","./Docs.min.js","./PlaygroundView.min.js","./Highlight.min.js"])))=>i.map(i=>d[i]); -import{v as t,I as e,P as i,S as s,F as n,N as o,s as a,l as r,w as l,a as c,b as u,c as d,d as p,e as h,t as m,f,g,h as k,i as b,k as v,D as y,j as $,E as w,m as x,n as _,o as C,T as S,u as O,p as M,r as A,q as I,x as D,y as j,z as E,A as L,B as T,C as B,G as q,H as P,J as N,V as z}from"./vendor.min.js";const F={},Y=function(t,e,i){let s=Promise.resolve();if(e&&e.length>0){let t=function(t){return Promise.all(t.map((t=>Promise.resolve(t).then((t=>({status:"fulfilled",value:t})),(t=>({status:"rejected",reason:t}))))))};const n=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),a=(null==o?void 0:o.nonce)||(null==o?void 0:o.getAttribute("nonce"));s=t(e.map((t=>{if(t=function(t,e){return new URL(t,e).href}(t,i),t in F)return;F[t]=!0;const e=t.endsWith(".css"),s=e?'[rel="stylesheet"]':"";if(!!i)for(let i=n.length-1;i>=0;i--){const s=n[i];if(s.href===t&&(!e||"stylesheet"===s.rel))return}else if(document.querySelector(`link[href="${t}"]${s}`))return;const o=document.createElement("link");return o.rel=e?"stylesheet":"modulepreload",e||(o.as="script"),o.crossOrigin="",o.href=t,a&&o.setAttribute("nonce",a),document.head.appendChild(o),e?new Promise(((e,i)=>{o.addEventListener("load",e),o.addEventListener("error",(()=>i(new Error(`Unable to preload CSS for ${t}`))))})):void 0})))}function n(t){const e=new Event("vite:preloadError",{cancelable:!0});if(e.payload=t,window.dispatchEvent(e),!e.defaultPrevented)throw t}return s.then((e=>{for(const t of e||[])"rejected"===t.status&&n(t.reason);return t().catch(n)}))},R={created(){this.$panel.events.subscribe();for(const t of this.$panel.plugins.created)t(this);this.$panel.events.on("popstate",(()=>{this.$panel.open(window.location.href)})),this.$panel.events.on("drop",(()=>{this.$panel.drag.stop()})),this.$store.dispatch("content/init")},destroyed(){this.$panel.events.unsubscribe()},render(t){if(this.$panel.view.component)return t(this.$panel.view.component,{key:this.$panel.view.component,props:this.$panel.view.props})}},U={props:{after:String}},H={props:{autocomplete:String}},V={props:{autofocus:Boolean}},K={props:{before:String}},W={props:{disabled:Boolean}},J={props:{font:String}},G={props:{help:String}},X={props:{id:{type:[Number,String],default(){return this._uid}}}},Z={props:{invalid:Boolean}},Q={props:{label:String}},tt={props:{layout:{type:String,default:"list"}}},et={props:{maxlength:Number}},it={props:{minlength:Number}},st={props:{name:[Number,String]}},nt={props:{options:{default:()=>[],type:Array}}},ot={props:{pattern:String}},at={props:{placeholder:[Number,String]}},rt={props:{required:Boolean}},lt={props:{spellcheck:{type:Boolean,default:!0}}};function ct(t,e,i,s,n,o,a,r){var l="function"==typeof t?t.options:t;return e&&(l.render=e,l.staticRenderFns=i,l._compiled=!0),{exports:t,options:l}}const ut={mixins:[tt],inheritAttrs:!1,props:{columns:{type:[Object,Array],default:()=>({})},fields:{type:Object,default:()=>({})},items:{type:Array,default:()=>[]},link:{type:Boolean,default:!0},sortable:Boolean,size:{type:String,default:"medium"},theme:String}};const dt=ct({mixins:[ut],props:{image:{type:[Object,Boolean],default:()=>({})}},emits:["change","hover","item","option","sort"],computed:{dragOptions(){return{sort:this.sortable,disabled:!1===this.sortable,draggable:".k-draggable-item"}},table(){return{columns:this.columns,fields:this.fields,rows:this.items,sortable:this.sortable}}},methods:{onDragStart(t,e){this.$panel.drag.start("text",e)},onOption(t,e,i){this.$emit("option",t,e,i)},imageOptions(t){let e=this.image,i=t.image;return!1!==e&&!1!==i&&("object"!=typeof e&&(e={}),"object"!=typeof i&&(i={}),{...i,...e})}}},(function(){var t=this,e=t._self._c;return"table"===t.layout?e("k-table",t._b({on:{change:function(e){return t.$emit("change",e)},sort:function(e){return t.$emit("sort",e)},option:t.onOption},scopedSlots:t._u([t.$scopedSlots.options?{key:"options",fn:function({row:e,rowIndex:i}){return[t._t("options",null,null,{item:e,index:i})]}}:null],null,!0)},"k-table",t.table,!1)):e("k-draggable",{staticClass:"k-items",class:"k-"+t.layout+"-items",attrs:{"data-layout":t.layout,"data-size":t.size,handle:!0,list:t.items,options:t.dragOptions},on:{change:function(e){return t.$emit("change",e)},end:function(e){return t.$emit("sort",t.items,e)}}},[t._l(t.items,(function(i,s){return[t._t("default",(function(){return[e("k-item",t._b({key:i.id??s,class:{"k-draggable-item":t.sortable&&i.sortable},attrs:{image:t.imageOptions(i),layout:t.layout,link:!!t.link&&i.link,sortable:t.sortable&&i.sortable,theme:i.theme??t.theme,width:i.column},on:{click:function(e){return t.$emit("item",i,s)},drag:function(e){return t.onDragStart(e,i.dragText)},option:function(e){return t.onOption(e,i,s)}},nativeOn:{mouseover:function(e){return t.$emit("hover",e,i,s)}},scopedSlots:t._u([{key:"options",fn:function(){return[t._t("options",null,null,{item:i,index:s})]},proxy:!0}],null,!0)},"k-item",i,!1))]}),null,{item:i,itemIndex:s})]}))],2)}),[]).exports;const pt=ct({mixins:[ut],props:{empty:{type:Object,default:()=>({})},help:String,pagination:{type:[Boolean,Object],default:!1}},emits:["action","change","empty","item","option","paginate","sort"],computed:{hasPagination(){return!1!==this.pagination&&(!0!==this.paginationOptions.hide&&!(this.pagination.total<=this.pagination.limit))},paginationOptions(){return{limit:10,details:!0,keys:!1,total:0,hide:!1,..."object"!=typeof this.pagination?{}:this.pagination}}},watch:{$props(){this.$forceUpdate()}},methods:{onEmpty(t){t.stopPropagation(),this.$emit("empty")},onOption(...t){this.$emit("action",...t),this.$emit("option",...t)}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-collection"},[0===t.items.length?e("k-empty",t._g(t._b({attrs:{layout:t.layout}},"k-empty",t.empty,!1),t.$listeners.empty?{click:t.onEmpty}:{})):e("k-items",t._b({on:{change:function(e){return t.$emit("change",e)},item:function(e){return t.$emit("item",e)},option:t.onOption,sort:function(e){return t.$emit("sort",e)}},scopedSlots:t._u([{key:"options",fn:function({item:e,index:i}){return[t._t("options",null,null,{item:e,index:i})]}}],null,!0)},"k-items",{columns:t.columns,fields:t.fields,items:t.items,layout:t.layout,link:t.link,size:t.size,sortable:t.sortable,theme:t.theme},!1)),t.help||t.hasPagination?e("footer",{staticClass:"k-collection-footer"},[e("k-text",{staticClass:"k-help k-collection-help",attrs:{html:t.help}}),t.hasPagination?e("k-pagination",t._b({on:{paginate:function(e){return t.$emit("paginate",e)}}},"k-pagination",t.paginationOptions,!1)):t._e()],1):t._e()],1)}),[]).exports;const ht=ct({mixins:[tt],props:{text:String,icon:String},emits:["click"],computed:{attrs(){const t={button:void 0!==this.$listeners.click,icon:this.icon,theme:"empty"};return"cardlets"!==this.layout&&"cards"!==this.layout||(t.align="center",t.height="var(--item-height-cardlet)"),t}}},(function(){var t=this;return(0,t._self._c)("k-box",t._b({staticClass:"k-empty",nativeOn:{click:function(e){return t.$emit("click",e)}}},"k-box",t.attrs,!1),[t._t("default",(function(){return[t._v(" "+t._s(t.text)+" ")]}))],2)}),[]).exports,mt={mixins:[tt],props:{image:[Object,Boolean],width:{type:String,default:"1/1"}}};const ft=ct({mixins:[mt],inheritAttrs:!1,computed:{attrs(){return{back:this.image.back??"gray-500",cover:!0,...this.image,ratio:"list"===this.layout?"auto":this.image.ratio,size:this.sizes}},sizes(){switch(this.width){case"1/2":case"2/4":return"(min-width: 30em) and (max-width: 65em) 59em, (min-width: 65em) 44em, 27em";case"1/3":return"(min-width: 30em) and (max-width: 65em) 59em, (min-width: 65em) 29.333em, 27em";case"1/4":return"(min-width: 30em) and (max-width: 65em) 59em, (min-width: 65em) 22em, 27em";case"2/3":return"(min-width: 30em) and (max-width: 65em) 59em, (min-width: 65em) 27em, 27em";case"3/4":return"(min-width: 30em) and (max-width: 65em) 59em, (min-width: 65em) 66em, 27em";default:return"(min-width: 30em) and (max-width: 65em) 59em, (min-width: 65em) 88em, 27em"}}}},(function(){var t=this,e=t._self._c;return t.image.src?e("k-image-frame",t._b({staticClass:"k-item-image"},"k-image-frame",t.attrs,!1)):e("k-icon-frame",t._b({staticClass:"k-item-image"},"k-icon-frame",t.attrs,!1))}),[]).exports;const gt=ct({mixins:[mt,tt],inheritAttrs:!1,props:{buttons:{type:Array,default:()=>[]},data:Object,info:String,link:{type:[Boolean,String,Function]},options:{type:[Array,Function,String]},sortable:Boolean,target:String,text:String,theme:String},emits:["action","click","drag","option"],computed:{hasFigure(){return!1!==this.image&&this.$helper.object.length(this.image)>0},title(){return this.$helper.string.stripHTML(this.$helper.string.unescapeHTML(this.text)).trim()}},methods:{onOption(t){this.$emit("action",t),this.$emit("option",t)}}},(function(){var t,e=this,i=e._self._c;return i("div",e._b({staticClass:"k-item",class:!!e.layout&&"k-"+e.layout+"-item",attrs:{"data-has-image":e.hasFigure,"data-layout":e.layout,"data-theme":e.theme},on:{click:function(t){return e.$emit("click",t)},dragstart:function(t){return e.$emit("drag",t)}}},"div",e.data,!1),[e._t("image",(function(){return[e.hasFigure?i("k-item-image",{attrs:{image:e.image,layout:e.layout,width:e.width}}):e._e()]})),e.sortable?i("k-sort-handle",{staticClass:"k-item-sort-handle",attrs:{tabindex:"-1"}}):e._e(),i("div",{staticClass:"k-item-content"},[i("h3",{staticClass:"k-item-title",attrs:{title:e.title}},[!1!==e.link?i("k-link",{attrs:{target:e.target,to:e.link}},[i("span",{domProps:{innerHTML:e._s(e.text??"–")}})]):i("span",{domProps:{innerHTML:e._s(e.text??"–")}})],1),e.info?i("p",{staticClass:"k-item-info",domProps:{innerHTML:e._s(e.info)}}):e._e()]),i("div",{staticClass:"k-item-options",attrs:{"data-only-option":!(null==(t=e.buttons)?void 0:t.length)||!e.options&&!e.$slots.options}},[e._l(e.buttons,(function(t,s){return i("k-button",e._b({key:"button-"+s},"k-button",t,!1))})),e._t("options",(function(){return[e.options?i("k-options-dropdown",{staticClass:"k-item-options-dropdown",attrs:{options:e.options},on:{option:e.onOption}}):e._e()]}))],2)],2)}),[]).exports,kt={install(t){t.component("k-collection",pt),t.component("k-empty",ht),t.component("k-item",gt),t.component("k-item-image",ft),t.component("k-items",dt)}};const bt=ct({},(function(){return(0,this._self._c)("div",{staticClass:"k-dialog-body"},[this._t("default")],2)}),[]).exports;function vt(t){return"object"==typeof t&&(null==t?void 0:t.constructor)===Object}function yt(t){return Object.keys(t??{}).length}function $t(t){return Object.keys(t).reduce(((e,i)=>(e[i.toLowerCase()]=t[i],e)),{})}const wt={clone:function(t){if(void 0!==t)return structuredClone(t)},isEmpty:function(t){return null==t||""===t||(!(!vt(t)||0!==yt(t))||0===t.length)},isObject:vt,length:yt,merge:function t(e,i={}){for(const s in i)i[s]instanceof Object&&Object.assign(i[s],t(e[s]??{},i[s]));return Object.assign(e??{},i),e},same:function(t,e){return JSON.stringify(t)===JSON.stringify(e)},toLowerKeys:$t},xt={props:{cancelButton:{default:!0,type:[Boolean,String,Object]},disabled:{default:!1,type:Boolean},icon:{default:"check",type:String},submitButton:{type:[Boolean,String,Object],default:!0},theme:{default:"positive",type:String}}};const _t=ct({mixins:[xt],emits:["cancel"],computed:{cancel(){return this.button(this.cancelButton,{click:()=>this.$emit("cancel"),class:"k-dialog-button-cancel",icon:"cancel",text:this.$t("cancel"),variant:"filled"})},submit(){return this.button(this.submitButton,{class:"k-dialog-button-submit",disabled:this.disabled||this.$panel.dialog.isLoading,icon:this.icon,text:this.$t("confirm"),theme:this.theme,type:"submit",variant:"filled"})}},methods:{button:(t,e)=>"string"==typeof t?{...e,text:t}:!1!==t&&(!1===vt(t)?e:{...e,...t})}},(function(){var t=this,e=t._self._c;return e("k-button-group",{staticClass:"k-dialog-buttons"},[t.cancel?e("k-button",t._b({},"k-button",t.cancel,!1)):t._e(),t.submit?e("k-button",t._b({attrs:{icon:t.$panel.dialog.isLoading?"loader":t.submit.icon}},"k-button",t.submit,!1)):t._e()],1)}),[]).exports,Ct={props:{empty:{default:()=>window.panel.$t("dialog.fields.empty"),type:String},fields:{default:()=>[],type:[Array,Object]},novalidate:{default:!0,type:Boolean},value:{default:()=>({}),type:Object}}};const St=ct({mixins:[Ct],emits:["input","submit"],computed:{hasFields(){return this.$helper.object.length(this.fields)>0}}},(function(){var t=this,e=t._self._c;return t.hasFields?e("k-fieldset",{staticClass:"k-dialog-fields",attrs:{novalidate:t.novalidate,fields:t.fields,value:t.value},on:{input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)}}}):e("k-box",{attrs:{theme:"info"}},[t._v(t._s(t.empty))])}),[]).exports;const Ot=ct({},(function(){return(0,this._self._c)("footer",{staticClass:"k-dialog-footer"},[this._t("default")],2)}),[]).exports;const Mt=ct({},(function(){var t=this,e=t._self._c;return"dialog"===t.$panel.notification.context?e("k-notification",{staticClass:"k-dialog-notification"}):t._e()}),[]).exports;const At=ct({props:{autofocus:{default:!0,type:Boolean},placeholder:{type:String},value:{type:String}},emits:["search"]},(function(){var t=this;return(0,t._self._c)("k-input",{staticClass:"k-dialog-search",attrs:{autofocus:t.autofocus,placeholder:t.placeholder,value:t.value,icon:"search",type:"search"},on:{input:function(e){return t.$emit("search",e)}}})}),[]).exports,It={props:{empty:{type:String,default:()=>window.panel.$t("dialog.text.empty")},text:{type:String}}};const Dt=ct({mixins:[It]},(function(){var t=this,e=t._self._c;return t.text?e("k-text",{attrs:{html:t.text}}):e("k-box",{attrs:{theme:"info"}},[t._v(t._s(t.empty))])}),[]).exports,jt={install(t){t.component("k-dialog-body",bt),t.component("k-dialog-buttons",_t),t.component("k-dialog-fields",St),t.component("k-dialog-footer",Ot),t.component("k-dialog-notification",Mt),t.component("k-dialog-search",At),t.component("k-dialog-text",Dt)}},Et={mixins:[xt],props:{size:{default:"default",type:String},visible:{default:!1,type:Boolean}},emits:["cancel","close","input","submit","success"],methods:{cancel(){this.$emit("cancel")},close(){this.$emit("close")},error(t){this.$panel.notification.error(t)},focus(t){this.$panel.dialog.focus(t)},input(t){this.$emit("input",t)},open(){this.$panel.dialog.open(this)},submit(){this.$emit("submit",this.value)},success(t){this.$emit("success",t)}}};const Lt=ct({mixins:[Et]},(function(){var t=this,e=t._self._c;return t.visible?e("portal",{attrs:{to:"dialog"}},[e("form",{staticClass:"k-dialog",class:t.$vnode.data.staticClass,attrs:{"data-has-footer":t.cancelButton||t.submitButton,"data-size":t.size,method:"dialog"},on:{click:function(t){t.stopPropagation()},submit:function(e){return e.preventDefault(),t.$emit("submit")}}},[t._t("header",(function(){return[e("k-dialog-notification")]})),t.$slots.default?e("k-dialog-body",[t._t("default")],2):t._e(),t._t("footer",(function(){return[t.cancelButton||t.submitButton?e("k-dialog-footer",[e("k-dialog-buttons",{attrs:{"cancel-button":t.cancelButton,disabled:t.disabled,icon:t.icon,"submit-button":t.submitButton,theme:t.theme},on:{cancel:function(e){return t.$emit("cancel")}}})],1):t._e()]}))],2)]):t._e()}),[]).exports;const Tt=ct({mixins:[Et],props:{cancelButton:{default:!1},changes:{type:Array},loading:{type:Boolean},size:{default:"medium"},submitButton:{default:!1}},computed:{ids(){return Object.keys(this.store).filter((t=>{var e;return this.$helper.object.length(null==(e=this.store[t])?void 0:e.changes)>0}))},store(){return this.$store.state.content.models}},watch:{ids:{handler(t){this.$panel.dialog.refresh({method:"POST",body:{ids:t}})},immediate:!0}}},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({staticClass:"k-changes-dialog"},"k-dialog",t.$props,!1),[!1===t.loading?[e("k-headline",[t._v(t._s(t.$t("lock.unsaved")))]),t.changes.length?e("k-items",{attrs:{items:t.changes,layout:"list"}}):e("k-empty",{attrs:{icon:"edit-line"}},[t._v(t._s(t.$t("lock.unsaved.empty")))])]:[e("k-icon",{attrs:{type:"loader"}})]],2)}),[]).exports;const Bt=ct({mixins:[Et,Ct],props:{fields:{default:()=>({href:{label:window.panel.$t("email"),type:"email",icon:"email"},title:{label:window.panel.$t("title"),type:"text",icon:"title"}})},size:{default:"medium"},submitButton:{default:()=>window.panel.$t("insert")}},data(){return{values:{href:"",title:null,...this.value}}},methods:{submit(){this.$emit("submit",this.values)}}},(function(){var t=this;return(0,t._self._c)("k-form-dialog",t._b({attrs:{value:t.values},on:{cancel:function(e){return t.$emit("cancel")},input:function(e){t.values=e},submit:t.submit}},"k-form-dialog",t.$props,!1))}),[]).exports;const qt=ct({mixins:[Et],props:{details:[Object,Array],message:String,size:{default:"medium",type:String}},emits:["cancel"],computed:{detailsList(){return Array.fromObject(this.details)}}},(function(){var t=this,e=t._self._c;return e("k-dialog",{ref:"dialog",staticClass:"k-error-dialog",attrs:{"cancel-button":!1,"submit-button":!1,size:t.size,visible:t.visible},on:{cancel:function(e){return t.$emit("cancel")}}},[e("k-text",[t._v(t._s(t.message))]),t.detailsList.length?e("dl",{staticClass:"k-error-details"},[t._l(t.detailsList,(function(i,s){return[e("dt",{key:"detail-label-"+s},[t._v(" "+t._s(i.label)+" ")]),e("dd",{key:"detail-message-"+s},["object"==typeof i.message?[e("ul",t._l(i.message,(function(i,s){return e("li",{key:s},[t._v(" "+t._s(i)+" ")])})),0)]:[t._v(" "+t._s(i.message)+" ")]],2)]}))],2):t._e()],1)}),[]).exports;const Pt=ct({},(function(){var t=this;return(0,t._self._c)(t.$panel.dialog.component,t._g(t._b({key:t.$panel.dialog.timestamp,tag:"component",attrs:{visible:!0}},"component",t.$panel.dialog.props,!1),t.$panel.dialog.listeners()))}),[]).exports,Nt=(t,e)=>{let i=null;return(...s)=>{clearTimeout(i),i=setTimeout((()=>t.apply(void 0,s)),e)}},zt={props:{delay:{default:200,type:Number},hasSearch:{default:!0,type:Boolean}},data:()=>({query:""}),watch:{query(){!1!==this.hasSearch&&this.search()}},created(){this.search=Nt(this.search,this.delay)},methods:{async search(){console.warn("Search mixin: Please implement a `search` method.")}}},Ft={props:{endpoint:String,empty:Object,fetchParams:Object,item:{type:Function,default:t=>t},max:Number,multiple:{type:Boolean,default:!0},size:{type:String,default:"medium"},value:{type:Array,default:()=>[]}}};const Yt=ct({mixins:[Et,zt,Ft],emits:["cancel","fetched","submit"],data(){return{models:[],selected:this.value.reduce(((t,e)=>({...t,[e]:{id:e}})),{}),pagination:{limit:20,page:1,total:0}}},computed:{items(){return this.models.map(this.item)}},watch:{fetchParams(t,e){!1===this.$helper.object.same(t,e)&&(this.pagination.page=1,this.fetch())}},mounted(){this.fetch()},methods:{async fetch(){const t={page:this.pagination.page,search:this.query,...this.fetchParams};try{this.$panel.dialog.isLoading=!0;const e=await this.$api.get(this.endpoint,t);this.models=e.data,this.pagination=e.pagination,this.$emit("fetched",e)}catch(e){this.$panel.error(e),this.models=[]}finally{this.$panel.dialog.isLoading=!1}},isSelected(t){return void 0!==this.selected[t.id]},paginate(t){this.pagination.page=t.page,this.pagination.limit=t.limit,this.fetch()},submit(){this.$emit("submit",Object.values(this.selected))},async search(){this.pagination.page=0,await this.fetch()},toggle(t){if(!1!==this.multiple&&1!==this.max||(this.selected={}),this.isSelected(t))return Vue.del(this.selected,t.id);this.max&&this.max<=this.$helper.object.length(this.selected)||Vue.set(this.selected,t.id,t)}}},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({staticClass:"k-models-dialog",on:{cancel:function(e){return t.$emit("cancel")},submit:t.submit}},"k-dialog",t.$props,!1),[t._t("header"),t.hasSearch?e("k-dialog-search",{attrs:{value:t.query},on:{search:function(e){t.query=e}}}):t._e(),e("k-collection",{attrs:{empty:{...t.empty,text:t.$panel.dialog.isLoading?t.$t("loading"):t.empty.text},items:t.items,link:!1,pagination:{details:!0,dropdown:!1,align:"center",...t.pagination},sortable:!1,layout:"list"},on:{item:t.toggle,paginate:t.paginate},scopedSlots:t._u([{key:"options",fn:function({item:i}){return[e("k-choice-input",{attrs:{checked:t.isSelected(i),type:t.multiple&&1!==t.max?"checkbox":"radio",title:t.isSelected(i)?t.$t("remove"):t.$t("select")},on:{click:function(e){return e.stopPropagation(),t.toggle(i)}}}),t._t("options",null,null,{item:i})]}}],null,!0)})],2)}),[]).exports;const Rt=ct({mixins:[Et,Ft],props:{empty:{type:Object,default:()=>({icon:"image",text:window.panel.$t("dialog.files.empty")})}}},(function(){var t=this;return(0,t._self._c)("k-models-dialog",t._b({on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit",e)}}},"k-models-dialog",t.$props,!1))}),[]).exports;const Ut=ct({mixins:[Et,Ct],props:{size:{default:"medium"},submitButton:{default:()=>window.panel.$t("save")},text:{type:String}},emits:["cancel","input","submit"]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({ref:"dialog",on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit",t.value)}}},"k-dialog",t.$props,!1),[t._t("default",(function(){return[t.text?e("k-dialog-text",{attrs:{text:t.text}}):t._e(),e("k-dialog-fields",{attrs:{fields:t.fields,novalidate:t.novalidate,value:t.value},on:{input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)}}})]}))],2)}),[]).exports;const Ht=ct({extends:Ut,watch:{"value.name"(t){this.fields.code.disabled||this.onNameChanges(t)},"value.code"(t){this.fields.code.disabled||(this.value.code=this.$helper.slug(t,[this.$panel.system.ascii]),this.onCodeChanges(this.value.code))}},methods:{onCodeChanges(t){if(!t)return this.value.locale=null;if(t.length>=2)if(-1!==t.indexOf("-")){let e=t.split("-"),i=[e[0],e[1].toUpperCase()];this.value.locale=i.join("_")}else{let e=this.$panel.system.locales??[];this.value.locale=null==e?void 0:e[t]}},onNameChanges(t){this.value.code=this.$helper.slug(t,[this.value.rules,this.$panel.system.ascii]).substr(0,2)}}},null,null).exports;const Vt=ct({mixins:[{mixins:[Et],props:{license:Object,size:{default:"large"}}}]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({ref:"dialog",staticClass:"k-license-dialog",on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit")}}},"k-dialog",t.$props,!1),[e("k-bar",{staticStyle:{"margin-bottom":"var(--spacing-2)"}},[e("h2",{staticClass:"k-headline"},[t._v(" "+t._s(t.$t("license"))+" ")])]),e("div",{staticClass:"k-table"},[e("table",{staticStyle:{"table-layout":"auto"}},[e("tbody",[e("tr",[e("th",{attrs:{"data-mobile":"true"}},[t._v(t._s(t.$t("type")))]),e("td",{attrs:{"data-mobile":"true"}},[t._v(t._s(t.license.type))])]),t.license.code?e("tr",[e("th",{attrs:{"data-mobile":"true"}},[t._v(t._s(t.$t("license.code")))]),e("td",{staticClass:"k-text",attrs:{"data-mobile":"true"}},[e("code",[t._v(t._s(t.license.code))])])]):t._e(),t.license.info?e("tr",[e("th",{attrs:{"data-mobile":"true"}},[t._v(t._s(t.$t("status")))]),e("td",{attrs:{"data-mobile":"true","data-theme":t.license.theme}},[e("p",{staticClass:"k-license-dialog-status"},[e("k-icon",{attrs:{type:t.license.icon}}),t._v(" "+t._s(t.license.info)+" ")],1)])]):t._e()])])])],1)}),[]).exports;const Kt=ct({mixins:[Et,Ct],props:{fields:{default:()=>({href:{label:window.panel.$t("link"),type:"link",placeholder:window.panel.$t("url.placeholder"),icon:"url"},title:{label:window.panel.$t("title"),type:"text",icon:"title"},target:{label:window.panel.$t("open.newWindow"),type:"toggle",text:[window.panel.$t("no"),window.panel.$t("yes")]}})},size:{default:"medium"},submitButton:{default:()=>window.panel.$t("insert")}},data(){return{values:{href:"",title:null,...this.value,target:Boolean(this.value.target??!1)}}},methods:{submit(){let t="/@/$1/";this.values.href.startsWith("page://")&&window.panel.language.code&&!1===window.panel.language.default&&(t="/"+window.panel.language.code+t);const e=this.values.href.replace(/(file|page):\/\//,t);this.$emit("submit",{...this.values,href:e,target:this.values.target?"_blank":null})}}},(function(){var t=this;return(0,t._self._c)("k-form-dialog",t._b({attrs:{value:t.values},on:{cancel:function(e){return t.$emit("cancel")},input:function(e){t.values=e},submit:t.submit}},"k-form-dialog",t.$props,!1))}),[]).exports;const Wt=ct({mixins:[Ut],props:{blueprints:{type:Array},size:{default:"medium",type:String},submitButton:{type:[String,Boolean],default:()=>window.panel.$t("save")},template:{type:String}},computed:{templates(){return this.blueprints.map((t=>({text:t.title,value:t.name})))}},methods:{pick(t){this.$panel.dialog.reload({query:{...this.$panel.dialog.query,slug:this.value.slug,template:t,title:this.value.title}})}}},(function(){var t=this,e=t._self._c;return e("k-form-dialog",t._b({ref:"dialog",staticClass:"k-page-create-dialog",on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit",t.value)}}},"k-form-dialog",t.$props,!1),[t.templates.length>1?e("k-select-field",{staticClass:"k-page-template-switch",attrs:{empty:!1,label:t.$t("template"),options:t.templates,required:!0,value:t.template},on:{input:function(e){return t.pick(e)}}}):t._e(),e("k-dialog-fields",{attrs:{fields:t.fields,novalidate:t.novalidate,value:t.value},on:{input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)}}})],1)}),[]).exports;const Jt=ct({mixins:[Et],props:{value:{default:()=>({}),type:Object}},emits:["cancel","input","submit"],methods:{select(t){this.$emit("input",{...this.value,parent:t.value})}}},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({ref:"dialog",staticClass:"k-page-move-dialog",attrs:{"submit-button":{icon:"parent",text:t.$t("move")},size:"medium"},on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit",t.value)}}},"k-dialog",t.$props,!1),[e("k-headline",[t._v(t._s(t.$t("page.move")))]),e("div",{staticClass:"k-page-move-parent",attrs:{tabindex:"0","data-autofocus":""}},[e("k-page-tree",{attrs:{current:t.value.parent,move:t.value.move,identifier:"id"},on:{select:t.select}})],1)],1)}),[]).exports;const Gt=ct({mixins:[Et,Ft],props:{empty:{type:Object,default:()=>({icon:"page",text:window.panel.$t("dialog.pages.empty")})}},data:()=>({model:null,parent:null})},(function(){var t=this,e=t._self._c;return e("k-models-dialog",t._b({attrs:{"fetch-params":{parent:t.parent}},on:{cancel:function(e){return t.$emit("cancel")},fetched:function(e){t.model=e.model},submit:function(e){return t.$emit("submit",e)}},scopedSlots:t._u([t.model?{key:"header",fn:function(){return[e("header",{staticClass:"k-pages-dialog-navbar"},[e("k-button",{attrs:{disabled:!t.model.id,title:t.$t("back"),icon:"angle-left"},on:{click:function(e){t.parent=t.model.parent}}}),e("k-headline",[t._v(t._s(t.model.title))])],1)]},proxy:!0}:null,t.model?{key:"options",fn:function({item:i}){return[e("k-button",{staticClass:"k-pages-dialog-option",attrs:{disabled:!i.hasChildren,title:t.$t("open"),icon:"angle-right"},on:{click:function(e){e.stopPropagation(),t.parent=i.id}}})]}}:null],null,!0)},"k-models-dialog",t.$props,!1))}),[]).exports;const Xt=ct({mixins:[{mixins:[Et,It]}]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({ref:"dialog",on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit")}}},"k-dialog",t.$props,!1),[t._t("default",(function(){return[e("k-dialog-text",{attrs:{text:t.text}})]}))],2)}),[]).exports;const Zt=ct({mixins:[Xt],props:{icon:{default:"trash"},submitButton:{default:()=>window.panel.$t("delete")},theme:{default:"negative"}}},(function(){var t=this;return(0,t._self._c)("k-text-dialog",t._b({ref:"dialog",on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit")}}},"k-text-dialog",t.$props,!1),[t._t("default")],2)}),[]).exports;const Qt=ct({mixins:[Et],props:{type:String},emits:["cancel"],data:()=>({results:null,pagination:{}}),methods:{focus(){var t;null==(t=this.$refs.search)||t.focus()},navigate(t){t&&(this.$go(t.link),this.close())},async search({type:t,query:e}){const i=await this.$panel.search(t,e);i&&(this.results=i.results,this.pagination=i.pagination)}}},(function(){var t=this,e=t._self._c;return e("k-dialog",{staticClass:"k-search-dialog",attrs:{"cancel-button":!1,"submit-button":!1,visible:!0,role:"search",size:"medium"},on:{cancel:function(e){return t.$emit("cancel")},submit:t.submit}},[e("k-search-bar",{ref:"search",attrs:{"default-type":t.type??t.$panel.view.search,"is-loading":t.$panel.searcher.isLoading,pagination:t.pagination,results:t.results,types:t.$panel.searches},on:{close:t.close,more:function(e){return t.$go("search",{query:e})},navigate:t.navigate,search:t.search}})],1)}),[]).exports;const te=ct({mixins:[{mixins:[Et,Ct]}],props:{fields:null,qr:{type:String,required:!0},size:{default:"large"},submitButton:{default:()=>({text:window.panel.$t("activate"),icon:"lock",theme:"notice"})}},emits:["cancel","input","submit"]},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({ref:"dialog",on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit")}}},"k-dialog",t.$props,!1),[e("k-dialog-text",{staticClass:"k-totp-dialog-intro",attrs:{text:t.$t("login.totp.enable.intro")}}),e("div",{staticClass:"k-totp-dialog-grid"},[e("div",{staticClass:"k-totp-qrcode"},[e("k-info-field",{attrs:{label:t.$t("login.totp.enable.qr.label"),text:t.qr,help:t.$t("login.totp.enable.qr.help",{secret:t.value.secret}),theme:"passive"}})],1),e("k-dialog-fields",{staticClass:"k-totp-dialog-fields",attrs:{fields:{info:{label:t.$t("login.totp.enable.confirm.headline"),type:"info",text:t.$t("login.totp.enable.confirm.text"),theme:"none"},confirm:{label:t.$t("login.totp.enable.confirm.label"),type:"text",counter:!1,font:"monospace",required:!0,placeholder:t.$t("login.code.placeholder.totp"),help:t.$t("login.totp.enable.confirm.help")},secret:{type:"hidden"}},novalidate:!0,value:t.value},on:{input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)}}})],1)],1)}),[]).exports;const ee=ct({mixins:[Et],props:{submitButton:{type:[String,Boolean,Object],default:()=>({icon:"upload",text:window.panel.$t("upload")})}}},(function(){var t=this,e=t._self._c;return e("k-dialog",t._b({ref:"dialog",staticClass:"k-upload-dialog",attrs:{disabled:t.disabled||0===t.$panel.upload.files.length},on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit")}}},"k-dialog",t.$props,!1),[e("k-dropzone",{on:{drop:function(e){return t.$panel.upload.select(e)}}},[0===t.$panel.upload.files.length?e("k-empty",{attrs:{icon:"upload",layout:"cards"},on:{click:function(e){return t.$panel.upload.pick()}}},[t._v(" "+t._s(t.$t("files.empty"))+" ")]):e("k-upload-items",{attrs:{items:t.$panel.upload.files},on:{remove:e=>{t.$panel.upload.remove(e.id)},rename:(t,e)=>{t.name=e}}})],1)],1)}),[]).exports;const ie=ct({extends:ee,props:{original:Object,submitButton:{type:[String,Boolean,Object],default:()=>({icon:"upload",text:window.panel.$t("replace")})}},computed:{file(){return this.$panel.upload.files[0]}}},(function(){var t,e,i,s,n=this,o=n._self._c;return o("k-dialog",n._b({ref:"dialog",staticClass:"k-upload-dialog k-upload-replace-dialog",on:{cancel:function(t){return n.$emit("cancel")},submit:function(t){return n.$emit("submit")}}},"k-dialog",n.$props,!1),[o("ul",{staticClass:"k-upload-items"},[o("li",{staticClass:"k-upload-original"},[o("k-upload-item-preview",{attrs:{color:null==(t=n.original.image)?void 0:t.color,icon:null==(e=n.original.image)?void 0:e.icon,url:n.original.url,type:n.original.mime}})],1),o("li",[n._v("←")]),o("k-upload-item",n._b({attrs:{color:null==(i=n.original.image)?void 0:i.color,editable:!1,icon:null==(s=n.original.image)?void 0:s.icon,name:n.$helper.file.name(n.original.filename),removable:!1}},"k-upload-item",n.file,!1))],1)])}),[]).exports;const se=ct({mixins:[Et,Ft],props:{empty:{type:Object,default:()=>({icon:"users",text:window.panel.$t("dialog.users.empty")})},item:{type:Function,default:t=>({...t,key:t.email,info:t.info!==t.text?t.info:null})}}},(function(){var t=this;return(0,t._self._c)("k-models-dialog",t._b({on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit",e)}}},"k-models-dialog",t.$props,!1))}),[]).exports,ne={install(t){t.use(jt),t.component("k-dialog",Lt),t.component("k-changes-dialog",Tt),t.component("k-email-dialog",Bt),t.component("k-error-dialog",qt),t.component("k-fiber-dialog",Pt),t.component("k-files-dialog",Rt),t.component("k-form-dialog",Ut),t.component("k-license-dialog",Vt),t.component("k-link-dialog",Kt),t.component("k-language-dialog",Ht),t.component("k-models-dialog",Yt),t.component("k-page-create-dialog",Wt),t.component("k-page-move-dialog",Jt),t.component("k-pages-dialog",Gt),t.component("k-remove-dialog",Zt),t.component("k-search-dialog",Qt),t.component("k-text-dialog",Xt),t.component("k-totp-dialog",te),t.component("k-upload-dialog",ee),t.component("k-upload-replace-dialog",ie),t.component("k-users-dialog",se)}};const oe=ct({},(function(){return(0,this._self._c)("div",{staticClass:"k-drawer-body scroll-y-auto"},[this._t("default")],2)}),[]).exports,ae={props:{empty:{type:String,default:()=>window.panel.$t("drawer.fields.empty")},fields:Object,novalidate:{type:Boolean,default:!0},value:Object}};const re=ct({mixins:[ae],emits:["input","submit"],computed:{hasFields(){return this.$helper.object.length(this.fields)>0}}},(function(){var t=this,e=t._self._c;return t.hasFields?e("k-fieldset",{staticClass:"k-drawer-fields",attrs:{novalidate:t.novalidate,fields:t.fields,value:t.value},on:{input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)}}}):e("k-box",{attrs:{theme:"info"}},[t._v(t._s(t.empty))])}),[]).exports,le={props:{breadcrumb:{default:()=>[],type:Array},tab:{type:String},tabs:{default:()=>({}),type:Object}}};const ce=ct({mixins:[le],emits:["crumb","tab"]},(function(){var t=this,e=t._self._c;return e("header",{staticClass:"k-drawer-header"},[e("nav",{staticClass:"k-breadcrumb k-drawer-breadcrumb"},[e("ol",t._l(t.breadcrumb,(function(i,s){return e("li",{key:i.id},[e("k-button",{staticClass:"k-breadcrumb-link",attrs:{icon:i.props.icon,text:i.props.title,current:s===t.breadcrumb.length-1,variant:"dimmed"},on:{click:function(e){return t.$emit("crumb",i.id)}}})],1)})),0)]),e("k-drawer-tabs",{attrs:{tab:t.tab,tabs:t.tabs},on:{open:function(e){return t.$emit("tab",e)}}}),e("nav",{staticClass:"k-drawer-options"},[t._t("default"),e("k-button",{staticClass:"k-drawer-option",attrs:{icon:"check",type:"submit"}})],2)],1)}),[]).exports;const ue=ct({},(function(){var t=this,e=t._self._c;return"drawer"===t.$panel.notification.context?e("k-notification",{staticClass:"k-drawer-notification"}):t._e()}),[]).exports;const de=ct({mixins:[{props:{tab:{type:String},tabs:{default:()=>({}),type:[Array,Object]}}}],emits:["open"],computed:{hasTabs(){return this.$helper.object.length(this.tabs)>1}}},(function(){var t=this,e=t._self._c;return t.hasTabs?e("nav",{staticClass:"k-drawer-tabs"},t._l(t.tabs,(function(i){return e("k-button",{key:i.name,staticClass:"k-drawer-tab",attrs:{current:t.tab===i.name,text:i.label},on:{click:function(e){return t.$emit("open",i.name)}}})})),1):t._e()}),[]).exports,pe={props:{empty:{type:String,default:()=>window.panel.$t("drawer.text.empty")},text:{type:String}}};const he=ct({mixins:[pe]},(function(){var t=this,e=t._self._c;return t.text?e("k-text",{attrs:{html:t.text}}):e("k-box",{attrs:{theme:"info"}},[t._v(t._s(t.empty))])}),[]).exports,me={install(t){t.component("k-drawer-body",oe),t.component("k-drawer-fields",re),t.component("k-drawer-header",ce),t.component("k-drawer-notification",ue),t.component("k-drawer-tabs",de),t.component("k-drawer-text",he)}},fe={mixins:[le],props:{disabled:{default:!1,type:Boolean},icon:String,id:String,options:{type:Array},title:String,visible:{default:!1,type:Boolean}}};const ge=ct({mixins:[fe],emits:["cancel","crumb","submit","tab"]},(function(){var t=this,e=t._self._c;return t.visible?e("portal",{attrs:{to:"drawer"}},[e("form",{staticClass:"k-drawer",class:t.$vnode.data.staticClass,attrs:{"aria-disabled":t.disabled,method:"dialog"},on:{submit:function(e){return e.preventDefault(),t.$emit("submit")}}},[e("k-drawer-notification"),e("k-drawer-header",{attrs:{breadcrumb:t.breadcrumb,tab:t.tab,tabs:t.tabs},on:{crumb:function(e){return t.$emit("crumb",e)},tab:function(e){return t.$emit("tab",e)}}},[t._t("options",(function(){return[t._l(t.options,(function(i,s){return[i.dropdown?[e("k-button",t._b({key:"btn-"+s,staticClass:"k-drawer-option",on:{click:function(e){t.$refs["dropdown-"+s][0].toggle()}}},"k-button",i,!1)),e("k-dropdown-content",{key:"dropdown-"+s,ref:"dropdown-"+s,refInFor:!0,attrs:{options:i.dropdown,"align-x":"end",theme:"light"}})]:e("k-button",t._b({key:s,staticClass:"k-drawer-option"},"k-button",i,!1))]}))]}))],2),e("k-drawer-body",[t._t("default")],2)],1)]):t._e()}),[]).exports,ke={props:{hidden:{type:Boolean},next:{type:Object},prev:{type:Object}}};const be=ct({mixins:[fe,ae,ke],emits:["cancel","crumb","input","next","prev","remove","show","submit","tab"]},(function(){var t=this,e=t._self._c;return e("k-form-drawer",t._b({ref:"drawer",staticClass:"k-block-drawer",on:{cancel:function(e){return t.$emit("cancel",e)},crumb:function(e){return t.$emit("crumb",e)},input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)},tab:function(e){return t.$emit("tab",e)}},scopedSlots:t._u([{key:"options",fn:function(){return[t.hidden?e("k-button",{staticClass:"k-drawer-option",attrs:{icon:"hidden"},on:{click:function(e){return t.$emit("show")}}}):t._e(),e("k-button",{staticClass:"k-drawer-option",attrs:{disabled:!t.prev,icon:"angle-left"},on:{click:function(e){return t.$emit("prev")}}}),e("k-button",{staticClass:"k-drawer-option",attrs:{disabled:!t.next,icon:"angle-right"},on:{click:function(e){return t.$emit("next")}}}),e("k-button",{staticClass:"k-drawer-option",attrs:{icon:"trash"},on:{click:function(e){return t.$emit("remove")}}})]},proxy:!0}])},"k-form-drawer",t.$props,!1))}),[]).exports;const ve=ct({methods:{isCurrent(t){return this.$panel.drawer.id===t}}},(function(){var t=this,e=t._self._c;return e("div",t._l(t.$panel.drawer.history.milestones,(function(i){return e(i.component,t._g(t._b({key:i.id,tag:"component",attrs:{breadcrumb:t.$panel.drawer.breadcrumb,disabled:!1===t.isCurrent(i.id),visible:!0}},"component",t.isCurrent(i.id)?t.$panel.drawer.props:i.props,!1),t.isCurrent(i.id)?t.$panel.drawer.listeners():i.on))})),1)}),[]).exports;const ye=ct({mixins:[fe,ae],emits:["cancel","crumb","input","submit","tab"]},(function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-form-drawer",on:{cancel:function(e){return t.$emit("cancel")},crumb:function(e){return t.$emit("crumb",e)},submit:function(e){return t.$emit("submit",t.value)},tab:function(e){return t.$emit("tab",e)}}},"k-drawer",t.$props,!1),[t._t("options",null,{slot:"options"}),e("k-drawer-fields",{attrs:{fields:t.fields,value:t.value},on:{input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)}}})],2)}),[]).exports;const $e=ct({mixins:[fe,ae,{props:{next:{type:Object},prev:{type:Object}}}],emits:["cancel","crumb","input","next","prev","remove","submit","tab"]},(function(){var t=this,e=t._self._c;return e("k-form-drawer",t._b({ref:"drawer",staticClass:"k-structure-drawer",on:{cancel:function(e){return t.$emit("cancel",e)},crumb:function(e){return t.$emit("crumb",e)},input:function(e){return t.$emit("input",e)},submit:function(e){return t.$emit("submit",e)},tab:function(e){return t.$emit("tab",e)}},scopedSlots:t._u([{key:"options",fn:function(){return[e("k-button",{staticClass:"k-drawer-option",attrs:{disabled:!t.prev,icon:"angle-left"},on:{click:function(e){return t.$emit("prev")}}}),e("k-button",{staticClass:"k-drawer-option",attrs:{disabled:!t.next,icon:"angle-right"},on:{click:function(e){return t.$emit("next")}}}),e("k-button",{staticClass:"k-drawer-option",attrs:{icon:"trash"},on:{click:function(e){return t.$emit("remove")}}})]},proxy:!0}])},"k-form-drawer",t.$props,!1))}),[]).exports;const we=ct({mixins:[fe,pe],emits:["cancel","crumb","input","submit","tab"]},(function(){var t=this,e=t._self._c;return e("k-drawer",t._b({ref:"drawer",staticClass:"k-text-drawer",on:{cancel:function(e){return t.$emit("cancel")},crumb:function(e){return t.$emit("crumb",e)},submit:function(e){return t.$emit("submit",t.value)},tab:function(e){return t.$emit("tab",e)}}},"k-drawer",t.$props,!1),[t._t("options",null,{slot:"options"}),e("k-dialog-text",{attrs:{text:t.text}})],2)}),[]).exports,xe={install(t){t.use(me),t.component("k-drawer",ge),t.component("k-block-drawer",be),t.component("k-fiber-drawer",ve),t.component("k-form-drawer",ye),t.component("k-structure-drawer",$e),t.component("k-text-drawer",we)}};const _e=ct({mounted(){window.panel.deprecated(" will be removed in a future version. Since Kirby 4.0, you don't need it anymore as wrapper element. Use `` as standalone instead.")}},(function(){return(0,this._self._c)("span",{staticClass:"k-dropdown",on:{click:function(t){t.stopPropagation()}}},[this._t("default")],2)}),[]).exports;let Ce=null;const Se=ct({props:{align:{type:String},alignX:{type:String,default:"start"},alignY:{type:String,default:"bottom"},disabled:{type:Boolean,default:!1},navigate:{default:!0,type:Boolean},options:[Array,Function,String],theme:{type:String,default:"dark"}},emits:["action","close","open"],data(){return{axis:{x:this.alignX,y:this.alignY},position:{x:0,y:0},isOpen:!1,items:[],opener:null}},mounted(){this.align&&window.panel.deprecated(": `align` prop will be removed in a future version. Use the `alignX` prop instead.")},methods:{close(){var t;null==(t=this.$refs.dropdown)||t.close()},async fetchOptions(t){return this.options?"string"==typeof this.options?this.$dropdown(this.options)(t):"function"==typeof this.options?this.options(t):Array.isArray(this.options)?t(this.options):void 0:t(this.items)},focus(t=0){this.$refs.navigate.focus(t)},onClick(){this.close()},onClose(){this.resetPosition(),this.isOpen=Ce=!1,this.$emit("close"),window.removeEventListener("resize",this.setPosition)},async onOpen(){this.isOpen=!0;const t=window.scrollY;Ce=this,await this.$nextTick(),this.$el&&this.opener&&(window.addEventListener("resize",this.setPosition),await this.setPosition(),window.scrollTo(0,t),this.$emit("open"))},onOptionClick(t){return this.close(),"function"==typeof t.click?t.click.call(this):"string"==typeof t.click?this.$emit("action",t.click):void(t.click&&(t.click.name&&this.$emit(t.click.name,t.click.payload),t.click.global&&this.$events.emit(t.click.global,t.click.payload)))},open(t){var e,i;if(!0===this.disabled)return!1;Ce&&Ce!==this&&Ce.close(),this.opener=t??(null==(e=window.event)?void 0:e.target.closest("button"))??(null==(i=window.event)?void 0:i.target),this.fetchOptions((t=>{this.items=t,this.onOpen()}))},async setPosition(){this.axis={x:this.alignX??this.align,y:this.alignY},"right"===this.axis.x?this.axis.x="end":"left"===this.axis.x&&(this.axis.x="start"),"rtl"===this.$panel.direction&&("start"===this.axis.x?this.axis.x="end":"end"===this.axis.x&&(this.axis.x="start")),this.opener.$el&&(this.opener=this.opener.$el);const t=this.opener.getBoundingClientRect();this.position.x=t.left+window.scrollX+t.width,this.position.y=t.top+window.scrollY+t.height,!0!==this.$el.open&&this.$el.showModal(),await this.$nextTick();const e=this.$el.getBoundingClientRect(),i=10;"end"===this.axis.x?t.left-e.widthwindow.innerWidth-i&&e.width+ie.top&&(this.axis.y="bottom"):t.top+e.height>window.innerHeight-i&&e.height+i!0===t.default));t.push(this.item(e)),t.push("-");const i=this.languages.filter((t=>!1===t.default));for(const s of i)t.push(this.item(s));return t}},methods:{change(t){this.$reload({query:{language:t.code}})},item(t){return{click:()=>this.change(t),current:t.code===this.language.code,text:t.name}}}},(function(){var t=this,e=t._self._c;return t.languages.length>1?e("div",{staticClass:"k-languages-dropdown"},[e("k-button",{attrs:{dropdown:!0,text:t.code,icon:"translate",responsive:"text",size:"sm",variant:"filled"},on:{click:function(e){return t.$refs.languages.toggle()}}}),e("k-dropdown-content",{ref:"languages",attrs:{options:t.options}})],1):t._e()}),[]).exports;const Ae=ct({props:{align:{type:String,default:"right"},disabled:{type:Boolean},icon:{type:String,default:"dots"},options:{type:[Array,Function,String],default:()=>[]},text:{type:[Boolean,String],default:!0},theme:{type:String,default:"dark"},size:String,variant:String},emits:["action","option"],computed:{hasSingleOption(){return Array.isArray(this.options)&&1===this.options.length}},methods:{onAction(t,e,i){"function"==typeof t?t.call(this):(this.$emit("action",t,e,i),this.$emit("option",t,e,i))},toggle(t=this.$el){this.$refs.options.toggle(t)}}},(function(){var t=this,e=t._self._c;return t.hasSingleOption?e("k-button",{staticClass:"k-options-dropdown-toggle",attrs:{disabled:t.disabled,icon:t.options[0].icon??t.icon,size:t.options[0].size??t.size,title:t.options[0].title??t.options[0].tooltip??t.options[0].text,variant:t.options[0].variant??t.variant},on:{click:function(e){return t.onAction(t.options[0].option??t.options[0].click,t.options[0],0)}}},[!0===t.text?[t._v(" "+t._s(t.options[0].text)+" ")]:!1!==t.text?[t._v(" "+t._s(t.text)+" ")]:t._e()],2):t.options.length?e("div",{staticClass:"k-options-dropdown"},[e("k-button",{staticClass:"k-options-dropdown-toggle",attrs:{disabled:t.disabled,dropdown:!0,icon:t.icon,size:t.size,text:!0!==t.text&&!1!==t.text?t.text:null,title:t.$t("options"),variant:t.variant},on:{click:function(e){return t.$refs.options.toggle()}}}),e("k-dropdown-content",{ref:"options",staticClass:"k-options-dropdown-content",attrs:{"align-x":t.align,options:t.options},on:{action:t.onAction}})],1):t._e()}),[]).exports,Ie={mixins:[V,W,X,st,rt]},De={mixins:[Ie],inheritAttrs:!1,emits:["input"],methods:{focus(){this.$el.focus()}}},je={mixins:[V,W,nt,rt],props:{ignore:{default:()=>[],type:Array},max:Number,min:Number,search:{default:!0,type:[Object,Boolean]}}},Ee={mixins:[Ie,je],props:{create:{type:[Boolean,Object],default:!1},multiple:{type:Boolean,default:!0},value:{type:[Array,String],default:()=>[]}},emits:["create","escape","input"]};const Le=ct({mixins:[De,Ee],data(){return{display:this.search.display??!0,query:""}},computed:{choices(){let t=this.filteredOptions;return!0!==this.display&&(t=t.slice(0,this.display)),t.map((t=>({...t,disabled:t.disabled||this.isFull&&!1===this.value.includes(t.value),text:this.highlight(t.text)})))},filteredOptions(){if(!(this.query.length<(this.search.min??0)))return this.$helper.array.search(this.options,this.query,{field:"text"})},isFull(){return this.max&&this.value.length>=this.max},placeholder(){return this.search.placeholder?this.search.placeholder:this.options.length>0?this.$t("filter")+"…":this.$t("enter")+"…"},showCreate(){var t;if(!1===this.create)return!1;if(this.isFull)return!1;if(0===this.query.trim().length)return!1;if(!0===this.ignore.includes(this.query))return!1;if(!0===(null==(t=this.create.ignore)?void 0:t.includes(this.query)))return!1;return 0===this.options.filter((t=>t.text===this.query||t.value===this.query)).length},showEmpty(){return!1===this.create&&0===this.filteredOptions.length}},watch:{value:{handler(){this.$emit("invalid",this.$v.$invalid,this.$v)},immediate:!0}},methods:{add(){this.showCreate&&this.$emit("create",this.query)},enter(t){var e;null==(e=t.target)||e.click()},escape(){0===this.query.length?this.$emit("escape"):this.query=""},focus(){var t;this.$refs.search?this.$refs.search.focus():null==(t=this.$refs.options)||t.focus()},highlight(t){if(t=this.$helper.string.stripHTML(t),this.query.length>0){const e=new RegExp(`(${RegExp.escape(this.query)})`,"ig");return t.replace(e,"$1")}return t},input(t){this.$emit("input",t)}},validations(){return{value:{required:!this.required||t.required,minLength:!this.min||t.minLength(this.min),maxLength:!this.max||t.maxLength(this.max)}}}},(function(){var t=this,e=t._self._c;return e("k-navigate",{staticClass:"k-picklist-input",attrs:{element:"nav",axis:"y",select:"input[type=search], label, .k-picklist-input-body button"},on:{prev:function(e){return t.$emit("escape")}}},[t.search?e("header",{staticClass:"k-picklist-input-header"},[e("div",{staticClass:"k-picklist-input-search"},[e("k-search-input",{ref:"search",attrs:{autofocus:t.autofocus,disabled:t.disabled,placeholder:t.placeholder,value:t.query},on:{input:function(e){t.query=e}},nativeOn:{keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"escape",void 0,e.key,void 0)?null:(e.preventDefault(),t.escape.apply(null,arguments))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.add.apply(null,arguments))}]}}),t.showCreate?e("k-button",{staticClass:"k-picklist-input-create",attrs:{icon:"add",size:"xs"},on:{click:t.add}}):t._e()],1)]):t._e(),t.filteredOptions.length?[e("div",{staticClass:"k-picklist-input-body"},[e(t.multiple?"k-checkboxes-input":"k-radio-input",{ref:"options",tag:"component",staticClass:"k-picklist-input-options",attrs:{disabled:t.disabled,options:t.choices,value:t.value},on:{input:t.input},nativeOn:{keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.enter.apply(null,arguments))}}}),!0!==t.display&&t.filteredOptions.length>t.display?e("k-button",{staticClass:"k-picklist-input-more",attrs:{icon:"angle-down"},on:{click:function(e){t.display=!0}}},[t._v(" "+t._s(t.$t("options.all",{count:t.filteredOptions.length}))+" ")]):t._e()],1)]:t.showEmpty?[e("div",{staticClass:"k-picklist-input-body"},[e("p",{staticClass:"k-picklist-input-empty"},[t._v(" "+t._s(t.$t("options.none"))+" ")])])]:t._e()],2)}),[]).exports;const Te=ct({mixins:[Ee],emits:["create","input"],methods:{close(){this.$refs.dropdown.close()},add(t){this.$emit("create",t)},input(t){this.$emit("input",t)},open(t){this.$refs.dropdown.open(t)},toggle(){this.$refs.dropdown.toggle()}}},(function(){var t=this,e=t._self._c;return e("k-dropdown-content",{ref:"dropdown",staticClass:"k-picklist-dropdown",attrs:{"align-x":"start",disabled:t.disabled,navigate:!1},nativeOn:{click:function(t){t.stopPropagation()}}},[e("k-picklist-input",t._b({on:{create:t.add,input:t.input,escape:function(e){return t.$refs.dropdown.close()}},nativeOn:{click:function(t){t.stopPropagation()}}},"k-picklist-input",t.$props,!1))],1)}),[]).exports,Be={install(t){t.component("k-dropdown",_e),t.component("k-dropdown-content",Se),t.component("k-dropdown-item",Oe),t.component("k-languages-dropdown",Me),t.component("k-options-dropdown",Ae),t.component("k-picklist-dropdown",Te)}};const qe=ct({props:{html:{type:Boolean,default:!1},limit:{type:Number,default:10},skip:{type:Array,default:()=>[]},options:Array,query:String},emits:["leave","search","select"],data:()=>({matches:[],selected:{text:null}}),mounted(){window.panel.deprecated(" will be removed in a future version.")},methods:{close(){this.$refs.dropdown.close()},onSelect(t){this.$emit("select",t),this.$refs.dropdown.close()},search(t){const e=this.options.filter((t=>-1!==this.skip.indexOf(t.value)));this.matches=this.$helper.array.search(e,t,{field:"text",limit:this.limit}),this.$emit("search",t,this.matches),this.$refs.dropdown.open()}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-autocomplete"},[t._t("default"),e("k-dropdown-content",{ref:"dropdown",attrs:{autofocus:!0},on:{leave:function(e){return t.$emit("leave")}}},t._l(t.matches,(function(i,s){return e("k-dropdown-item",t._b({key:s,nativeOn:{mousedown:function(e){return t.onSelect(i)},keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"tab",9,e.key,"Tab")?null:(e.preventDefault(),t.onSelect(i))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.onSelect(i))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"left",37,e.key,["Left","ArrowLeft"])||"button"in e&&0!==e.button?null:(e.preventDefault(),t.close.apply(null,arguments))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"backspace",void 0,e.key,void 0)?null:(e.preventDefault(),t.close.apply(null,arguments))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"delete",[8,46],e.key,["Backspace","Delete","Del"])?null:(e.preventDefault(),t.close.apply(null,arguments))}]}},"k-dropdown-item",i,!1),[e("span",{domProps:{innerHTML:t._s(t.html?i.text:t.$esc(i.text))}})])})),1),t._v(" "+t._s(t.query)+" ")],2)}),[]).exports;const Pe=ct({props:{count:Number,min:Number,max:Number,required:{type:Boolean,default:!1}},computed:{valid(){return!1===this.required&&0===this.count||(!0!==this.required||0!==this.count)&&(!(this.min&&this.countthis.max))}}},(function(){var t=this,e=t._self._c;return e("span",{staticClass:"k-counter",attrs:{"data-invalid":!t.valid}},[e("span",[t._v(t._s(t.count))]),t.min||t.max?e("span",{staticClass:"k-counter-rules"},[t.min&&t.max?[t._v(t._s(t.min)+"–"+t._s(t.max))]:t.min?[t._v("≥ "+t._s(t.min))]:t.max?[t._v("≤ "+t._s(t.max))]:t._e()],2):t._e()])}),[]).exports;const Ne=ct({props:{disabled:Boolean,config:Object,fields:{type:[Array,Object],default:()=>[]},novalidate:{type:Boolean,default:!1},value:{type:Object,default:()=>({})}},emits:["focus","input","submit"],data:()=>({errors:{}}),methods:{focus(t){var e,i;null==(i=null==(e=this.$refs.fields)?void 0:e.focus)||i.call(e,t)},onFocus(t,e,i){this.$emit("focus",t,e,i)},onInput(t,e,i){this.$emit("input",t,e,i)},onInvalid(t){this.$emit("invalid",t)},onSubmit(){this.$emit("submit",this.value)},submit(){this.$refs.submitter.click()}}},(function(){var t=this,e=t._self._c;return e("form",{ref:"form",staticClass:"k-form",attrs:{method:"POST",autocomplete:"off",novalidate:""},on:{submit:function(e){return e.preventDefault(),t.onSubmit.apply(null,arguments)}}},[t._t("header"),t._t("default",(function(){return[e("k-fieldset",{ref:"fields",attrs:{disabled:t.disabled,fields:t.fields,novalidate:t.novalidate,value:t.value},on:{focus:t.onFocus,input:t.onInput,invalid:t.onInvalid,submit:t.onSubmit}})]})),t._t("footer"),e("input",{ref:"submitter",staticClass:"k-form-submitter",attrs:{type:"submit"}})],2)}),[]).exports;const ze=ct({props:{lock:[Boolean,Object]},data:()=>({isLoading:null,isLocking:null}),computed:{api(){return[this.$panel.view.path+"/lock",null,null,!0]},buttons(){return"unlock"===this.mode?[{icon:"check",text:this.$t("lock.isUnlocked"),click:()=>this.resolve()},{icon:"download",text:this.$t("download"),responsive:!0,click:()=>this.download()}]:"lock"===this.mode?[{icon:this.lock.data.unlockable?"unlock":"loader",text:this.$t("lock.isLocked",{email:this.$esc(this.lock.data.email)}),title:this.$t("lock.unlock"),disabled:!this.lock.data.unlockable,click:()=>this.unlock()}]:"changes"===this.mode?[{icon:"undo",text:this.$t("revert"),responsive:!0,click:()=>this.revert()},{icon:"check",text:this.$t("save"),click:()=>this.save()}]:[]},disabled(){return"unlock"!==this.mode&&("lock"===this.mode?!this.lock.data.unlockable:"changes"===this.mode&&this.isDisabled)},hasChanges(){return this.$store.getters["content/hasChanges"]()},isDisabled(){return!1===this.$store.state.content.status.enabled},isLocked(){return"lock"===this.lockState},isUnlocked(){return"unlock"===this.lockState},mode(){return null!==this.lockState?this.lockState:!0===this.hasChanges?"changes":null},lockState(){return this.supportsLocking&&this.lock?this.lock.state:null},supportsLocking(){return!1!==this.lock},theme(){return"lock"===this.mode?"negative":"unlock"===this.mode?"info":"changes"===this.mode?"notice":null}},watch:{hasChanges:{handler(t,e){!0===this.supportsLocking&&!1===this.isLocked&&!1===this.isUnlocked&&(!0===t?(this.locking(),this.isLocking=setInterval(this.locking,3e4)):e&&(clearInterval(this.isLocking),this.locking(!1)))},immediate:!0},isLocked(t){!1===t&&this.$events.emit("model.reload")}},mounted(){this.supportsLocking&&(this.isLoading=setInterval(this.check,1e4)),this.$events.on("view.save",this.save)},destroyed(){clearInterval(this.isLoading),clearInterval(this.isLocking),this.$events.off("view.save",this.save)},methods:{async check(){if(!1===this.$panel.isOffline){const{lock:t}=await this.$api.get(...this.api);Vue.set(this.$panel.view.props,"lock",t)}},download(){let t="";const e=this.$store.getters["content/changes"]();for(const s in e){const i=e[s];t+=s+": \n\n","object"==typeof i&&Object.keys(i).length||Array.isArray(i)&&i.length?t+=JSON.stringify(i,null,2):t+=i,t+="\n\n----\n\n"}let i=document.createElement("a");i.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),i.setAttribute("download",this.$panel.view.path+".txt"),i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i)},async locking(t=!0){if(!0!==this.$panel.isOffline)if(!0===t)try{await this.$api.patch(...this.api)}catch{clearInterval(this.isLocking),this.$store.dispatch("content/revert")}else clearInterval(this.isLocking),await this.$api.delete(...this.api)},async resolve(){await this.unlock(!1),this.$store.dispatch("content/revert")},revert(){this.$panel.dialog.open({component:"k-remove-dialog",props:{submitButton:{icon:"undo",text:this.$t("revert")},text:this.$t("revert.confirm")},on:{submit:()=>{this.$store.dispatch("content/revert"),this.$panel.dialog.close()}}})},async save(t){var e;null==(e=null==t?void 0:t.preventDefault)||e.call(t),await this.$store.dispatch("content/save"),this.$events.emit("model.update"),this.$panel.notification.success()},async unlock(t=!0){const e=[this.$panel.view.path+"/unlock",null,null,!0];!0!==t?(await this.$api.delete(...e),this.$reload({silent:!0})):this.$panel.dialog.open({component:"k-remove-dialog",props:{submitButton:{icon:"unlock",text:this.$t("lock.unlock")},text:this.$t("lock.unlock.submit",{email:this.$esc(this.lock.data.email)})},on:{submit:async()=>{await this.$api.patch(...e),this.$panel.dialog.close(),this.$reload({silent:!0})}}})}}},(function(){var t=this,e=t._self._c;return t.buttons.length>0?e("k-button-group",{staticClass:"k-form-buttons",attrs:{layout:"collapsed"}},t._l(t.buttons,(function(i){return e("k-button",t._b({key:i.icon,attrs:{size:"sm",variant:"filled",disabled:t.isDisabled,theme:t.theme}},"k-button",i,!1))})),1):t._e()}),[]).exports,Fe={mixins:[W,G,X,Q,st,rt],props:{counter:[Boolean,Object],endpoints:Object,input:[String,Number],translate:Boolean,type:String}};const Ye=ct({mixins:[Fe],inheritAttrs:!1,emits:["blur","focus"]},(function(){var t=this,e=t._self._c;return e("div",{class:["k-field",`k-field-name-${t.name}`,`k-field-type-${t.type}`],attrs:{"data-disabled":t.disabled,"data-translate":t.translate},on:{focusin:function(e){return t.$emit("focus",e)},focusout:function(e){return t.$emit("blur",e)}}},[t._t("header",(function(){return[e("header",{staticClass:"k-field-header"},[t._t("label",(function(){return[e("k-label",{attrs:{input:t.input,required:t.required,title:t.label,type:"field"}},[t._v(" "+t._s(t.label)+" ")])]})),t._t("options"),t._t("counter",(function(){return[t.counter?e("k-counter",t._b({staticClass:"k-field-counter",attrs:{required:t.required}},"k-counter",t.counter,!1)):t._e()]}))],2)]})),t._t("default"),t._t("footer",(function(){return[t.help||t.$slots.help?e("footer",{staticClass:"k-field-footer"},[t._t("help",(function(){return[t.help?e("k-text",{staticClass:"k-help k-field-help",attrs:{html:t.help}}):t._e()]}))],2):t._e()]}))],2)}),[]).exports;const Re=ct({props:{config:Object,disabled:Boolean,fields:{type:[Array,Object],default:()=>({})},novalidate:{type:Boolean,default:!1},value:{type:Object,default:()=>({})}},emits:["focus","input","invalid","submit"],data:()=>({errors:{}}),methods:{focus(t){if(t)return void(this.hasField(t)&&"function"==typeof this.$refs[t][0].focus&&this.$refs[t][0].focus());const e=Object.keys(this.$refs)[0];this.focus(e)},hasFieldType(t){return this.$helper.isComponent(`k-${t}-field`)},hasField(t){var e;return null==(e=this.$refs[t])?void 0:e[0]},onInvalid(t,e,i,s){this.errors[s]=e,this.$emit("invalid",this.errors)},onInput(t,e,i){const s=this.value;this.$set(s,i,t),this.$emit("input",s,e,i)},hasErrors(){return this.$helper.object.length(this.errors)>0}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-fieldset"},[e("k-grid",{attrs:{variant:"fields"}},[t._l(t.fields,(function(i,s){return[t.$helper.field.isVisible(i,t.value)?e("k-column",{key:i.signature,attrs:{width:i.width}},[t.hasFieldType(i.type)?e("k-"+i.type+"-field",t._b({ref:s,refInFor:!0,tag:"component",attrs:{disabled:t.disabled||i.disabled,"form-data":t.value,name:s,novalidate:t.novalidate,value:t.value[s]},on:{input:function(e){return t.onInput(e,i,s)},focus:function(e){return t.$emit("focus",e,i,s)},invalid:(e,n)=>t.onInvalid(e,n,i,s),submit:function(e){return t.$emit("submit",e,i,s)}}},"component",i,!1)):e("k-box",{attrs:{theme:"negative"}},[e("k-text",{attrs:{size:"small"}},[t._v(" "+t._s(t.$t("error.field.type.missing",{name:s,type:i.type}))+" ")])],1)],1):t._e()]}))],2)],1)}),[]).exports,Ue={mixins:[U,K,W,Z],inheritAttrs:!1,props:{autofocus:Boolean,type:String,icon:[String,Boolean],novalidate:{type:Boolean,default:!1},value:{type:[String,Boolean,Number,Object,Array],default:null}}};const He=ct({mixins:[Ue],data(){return{isInvalid:this.invalid,listeners:{...this.$listeners,invalid:(t,e)=>{this.isInvalid=t,this.$emit("invalid",t,e)}}}},computed:{inputProps(){return{...this.$props,...this.$attrs}}},watch:{invalid(){this.isInvalid=this.invalid}},methods:{blur(t){(null==t?void 0:t.relatedTarget)&&!1===this.$el.contains(t.relatedTarget)&&this.trigger(null,"blur")},focus(t){this.trigger(t,"focus")},select(t){this.trigger(t,"select")},trigger(t,e){var i,s,n;if("INPUT"===(null==(i=null==t?void 0:t.target)?void 0:i.tagName)&&"function"==typeof(null==(s=null==t?void 0:t.target)?void 0:s[e]))return void t.target[e]();if("function"==typeof(null==(n=this.$refs.input)?void 0:n[e]))return void this.$refs.input[e]();const o=this.$el.querySelector("input, select, textarea");"function"==typeof(null==o?void 0:o[e])&&o[e]()}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-input",attrs:{"data-disabled":t.disabled,"data-invalid":!t.novalidate&&t.isInvalid,"data-type":t.type}},[t.$slots.before||t.before?e("span",{staticClass:"k-input-description k-input-before",on:{click:t.focus}},[t._t("before",(function(){return[t._v(t._s(t.before))]}))],2):t._e(),e("span",{staticClass:"k-input-element",on:{click:function(e){return e.stopPropagation(),t.focus.apply(null,arguments)}}},[t._t("default",(function(){return[e("k-"+t.type+"-input",t._g(t._b({ref:"input",tag:"component",attrs:{value:t.value}},"component",t.inputProps,!1),t.listeners))]}))],2),t.$slots.after||t.after?e("span",{staticClass:"k-input-description k-input-after",on:{click:t.focus}},[t._t("after",(function(){return[t._v(t._s(t.after))]}))],2):t._e(),t.$slots.icon||t.icon?e("span",{staticClass:"k-input-icon",on:{click:t.focus}},[t._t("icon",(function(){return[e("k-icon",{attrs:{type:t.icon}})]}))],2):t._e()])}),[]).exports;const Ve=ct({props:{accept:{type:String,default:"*"},attributes:{type:Object},max:{type:Number},method:{type:String,default:"POST"},multiple:{type:Boolean,default:!0},url:{type:String}},emits:["success"],methods:{open(t){window.panel.deprecated(" will be removed in a future version. Use `$panel.upload.open()` instead."),this.$panel.upload.pick(this.params(t))},params(t){return{...this.$props,...t??{},on:{complete:(t,e)=>{this.$emit("success",t,e)}}}},select(t){this.$panel.upload.select(t.target.files)},drop(t,e){window.panel.deprecated(" will be removed in a future version. Use `$panel.upload.select()` instead."),this.$panel.upload.open(t,this.params(e))},upload(t,e){window.panel.deprecated(" will be removed in a future version. Use `$panel.upload.select()` instead."),this.$panel.upload.select(t,this.params(e)),this.$panel.upload.start()}},render:()=>""},null,null).exports,Ke={props:{content:{default:()=>({}),type:[Array,Object]},fieldset:{default:()=>({}),type:Object}}};const We=ct({mixins:[Ke],inheritAttrs:!1,computed:{icon(){return this.fieldset.icon??"box"},label(){if(!this.fieldset.label||0===this.fieldset.label.length)return!1;if(this.fieldset.label===this.name)return!1;let t=this.$helper.string.template(this.fieldset.label,this.content);return"…"!==t&&(t=this.$helper.string.stripHTML(t),this.$helper.string.unescapeHTML(t))},name(){return this.fieldset.name??this.fieldset.label}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-block-title"},[e("k-icon",{staticClass:"k-block-icon",attrs:{type:t.icon}}),t.name?e("span",{staticClass:"k-block-name"},[t._v(" "+t._s(t.name)+" ")]):t._e(),t.label?e("span",{staticClass:"k-block-label"},[t._v(" "+t._s(t.label)+" ")]):t._e()],1)}),[]).exports,Je={mixins:[Ke,W],props:{endpoints:{default:()=>({}),type:[Array,Object]},id:String}};const Ge=ct({mixins:[Je],inheritAttrs:!1,methods:{field(t,e=null){let i=null;for(const s of Object.values(this.fieldset.tabs??{}))s.fields[t]&&(i=s.fields[t]);return i??e},open(){this.$emit("open")},update(t){this.$emit("update",{...this.content,...t})}}},(function(){var t=this;return(0,t._self._c)("k-block-title",{attrs:{content:t.content,fieldset:t.fieldset},nativeOn:{dblclick:function(e){return t.$emit("open")}}})}),[]).exports,Xe={props:{isBatched:Boolean,isFull:Boolean,isHidden:Boolean,isMergable:Boolean}};const Ze=ct({mixins:[Xe],props:{isEditable:Boolean,isSplitable:Boolean},emits:["chooseToAppend","chooseToConvert","chooseToPrepend","copy","duplicate","hide","merge","open","paste","remove","removeSelected","show","split","sortDown","sortUp"],computed:{buttons(){return this.isBatched?[{icon:"template",title:this.$t("copy"),click:()=>this.$emit("copy")},{when:this.isMergable,icon:"merge",title:this.$t("merge"),click:()=>this.$emit("merge")},{icon:"trash",title:this.$t("remove"),click:()=>this.$emit("removeSelected")}]:[{when:this.isEditable,icon:"edit",title:this.$t("edit"),click:()=>this.$emit("open")},{icon:"add",title:this.$t("insert.after"),disabled:this.isFull,click:()=>this.$emit("chooseToAppend")},{icon:"trash",title:this.$t("delete"),click:()=>this.$emit("remove")},{icon:"sort",title:this.$t("sort.drag"),class:"k-sort-handle",key:t=>this.sort(t)},{icon:"dots",title:this.$t("more"),dropdown:[{icon:"angle-up",label:this.$t("insert.before"),disabled:this.isFull,click:()=>this.$emit("chooseToPrepend")},{icon:"angle-down",label:this.$t("insert.after"),disabled:this.isFull,click:()=>this.$emit("chooseToAppend")},"-",{when:this.isEditable,icon:"edit",label:this.$t("edit"),click:()=>this.$emit("open")},{icon:"refresh",label:this.$t("field.blocks.changeType"),click:()=>this.$emit("chooseToConvert")},{when:this.isSplitable,icon:"split",label:this.$t("split"),click:()=>this.$emit("split")},"-",{icon:"template",label:this.$t("copy"),click:()=>this.$emit("copy")},{icon:"download",label:this.$t("paste.after"),disabled:this.isFull,click:()=>this.$emit("paste")},"-",{icon:this.isHidden?"preview":"hidden",label:this.isHidden?this.$t("show"):this.$t("hide"),click:()=>this.$emit(this.isHidden?"show":"hide")},{icon:"copy",label:this.$t("duplicate"),click:()=>this.$emit("duplicate")},"-",{icon:"trash",label:this.$t("delete"),click:()=>this.$emit("remove")}]}]}},methods:{open(){this.$refs.options.open()},sort(t){switch(t.key){case"ArrowUp":t.preventDefault(),this.$emit("sortUp");break;case"ArrowDown":t.preventDefault(),this.$emit("sortDown")}}}},(function(){return(0,this._self._c)("k-toolbar",{staticClass:"k-block-options",attrs:{buttons:this.buttons},nativeOn:{mousedown:function(t){t.preventDefault()}}})}),[]).exports;const Qe=ct({mixins:[Je,Xe],inheritAttrs:!1,props:{attrs:{default:()=>({}),type:[Array,Object]},isLastSelected:Boolean,isSelected:Boolean,name:String,next:Object,prev:Object,type:String},emits:["append","chooseToAppend","chooseToConvert","chooseToPrepend","close","copy","duplicate","focus","hide","merge","open","paste","prepend","remove","selectDown","selectUp","show","sortDown","sortUp","split","submit","update"],computed:{className(){let t=["k-block-type-"+this.type];return this.fieldset.preview&&this.fieldset.preview!==this.type&&t.push("k-block-type-"+this.fieldset.preview),!1===this.wysiwyg&&t.push("k-block-type-default"),t},containerType(){const t=this.fieldset.preview;return!1!==t&&(t&&this.$helper.isComponent("k-block-type-"+t)?t:!!this.$helper.isComponent("k-block-type-"+this.type)&&this.type)},customComponent(){return this.wysiwyg?this.wysiwygComponent:"k-block-type-default"},isDisabled(){return!0===this.disabled||!0===this.fieldset.disabled},isEditable(){return!1!==this.fieldset.editable},listeners(){return{append:t=>this.$emit("append",t),chooseToAppend:t=>this.$emit("chooseToAppend",t),chooseToConvert:t=>this.$emit("chooseToConvert",t),chooseToPrepend:t=>this.$emit("chooseToPrepend",t),close:()=>this.$emit("close"),copy:()=>this.$emit("copy"),duplicate:()=>this.$emit("duplicate"),focus:()=>this.$emit("focus"),hide:()=>this.$emit("hide"),merge:()=>this.$emit("merge"),open:t=>this.open(t),paste:()=>this.$emit("paste"),prepend:t=>this.$emit("prepend",t),remove:()=>this.remove(),removeSelected:()=>this.$emit("removeSelected"),show:()=>this.$emit("show"),sortDown:()=>this.$emit("sortDown"),sortUp:()=>this.$emit("sortUp"),split:t=>this.$emit("split",t),update:t=>this.$emit("update",t)}},tabs(){const t=this.fieldset.tabs??{};for(const[e,i]of Object.entries(t))for(const[s]of Object.entries(i.fields??{}))t[e].fields[s].section=this.name,t[e].fields[s].endpoints={field:this.endpoints.field+"/fieldsets/"+this.type+"/fields/"+s,section:this.endpoints.section,model:this.endpoints.model};return t},wysiwyg(){return!1!==this.wysiwygComponent},wysiwygComponent(){return!!this.containerType&&"k-block-type-"+this.containerType}},methods:{backspace(t){if(t.target.matches("[contenteditable], input, textarea"))return!1;t.preventDefault(),this.remove()},close(){this.$panel.drawer.close(this.id)},focus(){var t,e;"function"==typeof(null==(t=this.$refs.editor)?void 0:t.focus)?this.$refs.editor.focus():null==(e=this.$refs.container)||e.focus()},goTo(t){var e;t&&(null==(e=t.$refs.container)||e.focus(),t.open(null,!0))},isSplitable(){var t;return!0!==this.isFull&&(!!this.$refs.editor&&((this.$refs.editor.isSplitable??!0)&&"function"==typeof(null==(t=this.$refs.editor)?void 0:t.split)))},onClose(){this.$emit("close"),this.focus()},onFocus(t){this.disabled||this.$emit("focus",t)},onFocusIn(t){var e,i;this.disabled||(null==(i=null==(e=this.$refs.options)?void 0:e.$el)?void 0:i.contains(t.target))||this.$emit("focus",t)},onInput(t){this.$emit("update",t)},open(t,e=!1){!this.isEditable||this.isBatched||this.isDisabled||(this.$panel.drawer.open({component:"k-block-drawer",id:this.id,tab:t,on:{close:this.onClose,input:this.onInput,next:()=>this.goTo(this.next),prev:()=>this.goTo(this.prev),remove:this.remove,show:this.show,submit:this.submit},props:{hidden:this.isHidden,icon:this.fieldset.icon??"box",next:this.next,prev:this.prev,tabs:this.tabs,title:this.fieldset.name,value:this.content},replace:e}),this.$emit("open"))},remove(){if(this.isBatched)return this.$emit("removeSelected");this.$panel.dialog.open({component:"k-remove-dialog",props:{text:this.$t("field.blocks.delete.confirm")},on:{submit:()=>{this.$panel.dialog.close(),this.close(),this.$emit("remove",this.id)}}})},show(){this.$emit("show")},submit(){this.close(),this.$emit("submit")}}},(function(){var t=this,e=t._self._c;return e("div",{ref:"container",staticClass:"k-block-container",class:["k-block-container-fieldset-"+t.type,t.containerType?"k-block-container-type-"+t.containerType:""],attrs:{"data-batched":t.isBatched,"data-disabled":t.isDisabled,"data-hidden":t.isHidden,"data-id":t.id,"data-last-selected":t.isLastSelected,"data-selected":t.isSelected,"data-translate":t.fieldset.translate,tabindex:t.isDisabled?null:0},on:{keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"j",void 0,e.key,void 0)?null:e.ctrlKey?(e.preventDefault(),e.stopPropagation(),t.$emit("merge")):null},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"down",40,e.key,["Down","ArrowDown"])?null:e.ctrlKey&&e.altKey?(e.preventDefault(),e.stopPropagation(),t.$emit("selectDown")):null},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"up",38,e.key,["Up","ArrowUp"])?null:e.ctrlKey&&e.altKey?(e.preventDefault(),e.stopPropagation(),t.$emit("selectUp")):null},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"down",40,e.key,["Down","ArrowDown"])?null:e.ctrlKey&&e.shiftKey?(e.preventDefault(),e.stopPropagation(),t.$emit("sortDown")):null},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"up",38,e.key,["Up","ArrowUp"])?null:e.ctrlKey&&e.shiftKey?(e.preventDefault(),e.stopPropagation(),t.$emit("sortUp")):null},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"backspace",void 0,e.key,void 0)?null:e.ctrlKey?(e.stopPropagation(),t.backspace.apply(null,arguments)):null}],focus:function(e){return e.stopPropagation(),t.onFocus.apply(null,arguments)},focusin:function(e){return e.stopPropagation(),t.onFocusIn.apply(null,arguments)}}},[e("div",{staticClass:"k-block",class:t.className,attrs:{"data-disabled":t.isDisabled}},[e(t.customComponent,t._g(t._b({ref:"editor",tag:"component",attrs:{tabs:t.tabs}},"component",t.$props,!1),t.listeners))],1),t.isDisabled?t._e():e("k-block-options",t._g(t._b({ref:"options"},"k-block-options",{isBatched:t.isBatched,isEditable:t.isEditable,isFull:t.isFull,isHidden:t.isHidden,isMergable:t.isMergable,isSplitable:t.isSplitable()},!1),{...t.listeners,split:()=>t.$refs.editor.split(),open:()=>{"function"==typeof t.$refs.editor.open?t.$refs.editor.open():t.open()}}))],1)}),[]).exports,ti={mixins:[V,W,X],props:{empty:String,endpoints:Object,fieldsets:Object,fieldsetGroups:Object,group:String,max:{type:Number,default:null},value:{type:Array,default:()=>[]}},emits:["input"]};const ei=ct({mixins:[ti],inheritAttrs:!1,data(){return{blocks:this.value??[],isEditing:!1,isMultiSelectKey:!1,selected:[]}},computed:{draggableOptions(){return{id:this.id,handle:".k-sort-handle",list:this.blocks,move:this.move,delay:10,data:{fieldsets:this.fieldsets,isFull:this.isFull},options:{group:this.group}}},hasFieldsets(){return this.$helper.object.length(this.fieldsets)>0},isEmpty(){return 0===this.blocks.length},isFull(){return null!==this.max&&this.blocks.length>=this.max},isMergable(){if(this.selected.length<2)return!1;const t=this.selected.map((t=>this.find(t)));return!(new Set(t.map((t=>t.type))).size>1)&&"function"==typeof this.ref(t[0]).$refs.editor.merge}},watch:{value(){this.blocks=this.value}},mounted(){!0===this.$props.autofocus&&setTimeout(this.focus,100),this.$events.on("blur",this.onBlur),this.$events.on("click",this.onClickGlobal),this.$events.on("copy",this.onCopy),this.$events.on("keydown",this.onKey),this.$events.on("keyup",this.onKey),this.$events.on("paste",this.onPaste)},destroyed(){this.$events.off("blur",this.onBlur),this.$events.off("click",this.onClickGlobal),this.$events.off("copy",this.onCopy),this.$events.off("keydown",this.onKey),this.$events.off("keyup",this.onKey),this.$events.off("paste",this.onPaste)},methods:{async add(t="text",e){const i=await this.$api.get(this.endpoints.field+"/fieldsets/"+t);this.blocks.splice(e,0,i),this.save(),await this.$nextTick(),this.focusOrOpen(i)},choose(t){if(1===this.$helper.object.length(this.fieldsets))return this.add(Object.values(this.fieldsets)[0].type,t);this.$panel.dialog.open({component:"k-block-selector",props:{fieldsetGroups:this.fieldsetGroups,fieldsets:this.fieldsets},on:{submit:e=>{this.add(e,t),this.$panel.dialog.close()},paste:e=>{this.paste(e,t)}}})},chooseToConvert(t){this.$panel.dialog.open({component:"k-block-selector",props:{disabledFieldsets:[t.type],fieldsetGroups:this.fieldsetGroups,fieldsets:this.fieldsets,headline:this.$t("field.blocks.changeType")},on:{submit:e=>{this.convert(e,t),this.$panel.dialog.close()},paste:this.paste}})},copy(t){if(0===this.blocks.length)return!1;if(0===this.selected.length)return!1;let e=[];for(const i of this.blocks)this.selected.includes(i.id)&&e.push(i);if(0===e.length)return!1;this.$helper.clipboard.write(e,t),this.selected=e.map((t=>t.id)),this.$panel.notification.success({message:this.$t("copy.success",{count:e.length}),icon:"template"})},copyAll(){this.selectAll(),this.copy(),this.deselectAll()},async convert(t,e){var i;const s=this.findIndex(e.id);if(-1===s)return!1;const n=t=>{let e={};for(const i of Object.values((null==t?void 0:t.tabs)??{}))e={...e,...i.fields};return e},o=this.blocks[s],a=await this.$api.get(this.endpoints.field+"/fieldsets/"+t),r=this.fieldsets[o.type],l=this.fieldsets[t];if(!l)return!1;let c=a.content;const u=n(l),d=n(r);for(const[p,h]of Object.entries(u)){const t=d[p];(null==t?void 0:t.type)===h.type&&(null==(i=null==o?void 0:o.content)?void 0:i[p])&&(c[p]=o.content[p])}this.blocks[s]={...a,id:o.id,content:c},this.save()},deselect(t){const e=this.selected.findIndex((e=>e===t.id));-1!==e&&this.selected.splice(e,1)},deselectAll(){this.selected=[]},async duplicate(t,e){const i={...structuredClone(t),id:this.$helper.uuid()};this.blocks.splice(e+1,0,i),this.save()},fieldset(t){return this.fieldsets[t.type]??{icon:"box",name:t.type,tabs:{content:{fields:{}}},type:t.type}},find(t){return this.blocks.find((e=>e.id===t))},findIndex(t){return this.blocks.findIndex((e=>e.id===t))},focus(t){const e=this.ref(t);this.selected=[(null==t?void 0:t.id)??this.blocks[0]],null==e||e.focus(),null==e||e.$el.scrollIntoView({block:"nearest"})},focusOrOpen(t){this.fieldsets[t.type].wysiwyg?this.focus(t):this.open(t)},hide(t){Vue.set(t,"isHidden",!0),this.save()},isInputEvent(){const t=document.querySelector(":focus");return null==t?void 0:t.matches("input, textarea, [contenteditable], .k-writer")},isLastSelected(t){const[e]=this.selected.slice(-1);return e&&t.id===e},isOnlyInstance:()=>1===document.querySelectorAll(".k-blocks").length,isSelected(t){return this.selected.includes(t.id)},async merge(){if(this.isMergable){const t=this.selected.map((t=>this.find(t)));this.ref(t[0]).$refs.editor.merge(t);for(const e of t.slice(1))this.remove(e);await this.$nextTick(),this.focus(t[0])}},move(t){if(t.from!==t.to){const e=t.draggedContext.element,i=t.relatedContext.component.componentData||t.relatedContext.component.$parent.componentData;if(!1===Object.keys(i.fieldsets).includes(e.type))return!1;if(!0===i.isFull)return!1}return!0},onBlur(){0===this.selected.length&&(this.isMultiSelectKey=!1)},onClickBlock(t,e){e&&this.isMultiSelectKey&&this.onKey(e),this.isMultiSelectKey&&(e.preventDefault(),e.stopPropagation(),this.isSelected(t)?this.deselect(t):this.select(t))},onClickGlobal(t){var e;if("function"==typeof t.target.closest&&(t.target.closest(".k-dialog")||t.target.closest(".k-drawer")))return;const i=document.querySelector(".k-overlay:last-of-type");!1!==this.$el.contains(t.target)||!1!==(null==i?void 0:i.contains(t.target))?i&&!1===(null==(e=this.$el.closest(".k-layout-column"))?void 0:e.contains(t.target))&&this.deselectAll():this.deselectAll()},onCopy(t){return!1!==this.$el.contains(t.target)&&!0!==this.isEditing&&!0!==this.$panel.dialog.isOpen&&!0!==this.isInputEvent(t)&&this.copy(t)},onFocus(t){!1===this.isMultiSelectKey&&(this.selected=[t.id])},async onKey(t){if(this.isMultiSelectKey=t.metaKey||t.ctrlKey||t.altKey,"Escape"===t.code&&this.selected.length>1){const t=this.find(this.selected[0]);await this.$nextTick(),this.focus(t)}},onPaste(t){return!0!==this.isInputEvent(t)&&(!0!==this.isEditing&&!0!==this.$panel.dialog.isOpen&&((0!==this.selected.length||!1!==this.$el.contains(t.target))&&this.paste(t)))},open(t){var e;null==(e=this.$refs["block-"+t.id])||e[0].open()},async paste(t,e){const i=this.$helper.clipboard.read(t);let s=await this.$api.post(this.endpoints.field+"/paste",{html:i});if(void 0===e){let t=this.selected[this.selected.length-1];-1===(e=this.findIndex(t))&&(e=this.blocks.length),e++}if(this.max){const t=this.max-this.blocks.length;s=s.slice(0,t)}this.blocks.splice(e,0,...s),this.save(),this.$panel.notification.success({message:this.$t("paste.success",{count:s.length}),icon:"download"})},pasteboard(){this.$panel.dialog.open({component:"k-block-pasteboard",on:{paste:this.paste}})},prevNext(t){var e;if(this.blocks[t])return null==(e=this.$refs["block-"+this.blocks[t].id])?void 0:e[0]},ref(t){var e,i;return null==(i=this.$refs["block-"+((null==t?void 0:t.id)??(null==(e=this.blocks[0])?void 0:e.id))])?void 0:i[0]},remove(t){const e=this.findIndex(t.id);-1!==e&&(this.deselect(t),this.$delete(this.blocks,e),this.save())},removeAll(){this.$panel.dialog.open({component:"k-remove-dialog",props:{text:this.$t("field.blocks.delete.confirm.all"),submitButton:this.$t("delete.all")},on:{submit:()=>{this.selected=[],this.blocks=[],this.save(),this.$panel.dialog.close()}}})},removeSelected(){this.$panel.dialog.open({component:"k-remove-dialog",props:{text:this.$t("field.blocks.delete.confirm.selected")},on:{submit:()=>{for(const t of this.selected){const e=this.findIndex(t);-1!==e&&this.$delete(this.blocks,e)}this.deselectAll(),this.save(),this.$panel.dialog.close()}}})},save(){this.$emit("input",this.blocks)},select(t){!1===this.isSelected(t)&&this.selected.push(t.id)},selectDown(){const t=this.selected[this.selected.length-1],e=this.findIndex(t)+1;e=0&&this.select(this.blocks[e])},selectAll(){this.selected=Object.values(this.blocks).map((t=>t.id))},show(t){Vue.set(t,"isHidden",!1),this.save()},async sort(t,e,i){if(i<0)return;let s=structuredClone(this.blocks);s.splice(e,1),s.splice(i,0,t),this.blocks=s,this.save(),await this.$nextTick(),this.focus(t)},async split(t,e,i){const s=structuredClone(t);s.content={...s.content,...i[0]};const n=await this.$api.get(this.endpoints.field+"/fieldsets/"+t.type);n.content={...n.content,...s.content,...i[1]},this.blocks.splice(e,1,s,n),this.save(),await this.$nextTick(),this.focus(n)},update(t,e){const i=this.findIndex(t.id);if(-1!==i)for(const s in e)Vue.set(this.blocks[i].content,s,e[s]);this.save()}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-blocks",attrs:{"data-disabled":t.disabled,"data-empty":0===t.blocks.length}},[t.hasFieldsets?[e("k-draggable",t._b({staticClass:"k-blocks-list",attrs:{"data-multi-select-key":t.isMultiSelectKey},on:{sort:t.save},scopedSlots:t._u([0===t.blocks.length?{key:"footer",fn:function(){return[e("k-empty",{staticClass:"k-blocks-empty",attrs:{icon:"box"},on:{click:function(e){return t.choose(t.blocks.length)}}},[t._v(" "+t._s(t.empty??t.$t("field.blocks.empty"))+" ")])]},proxy:!0}:null],null,!0)},"k-draggable",t.draggableOptions,!1),t._l(t.blocks,(function(i,s){return e("k-block",t._b({key:i.id,ref:"block-"+i.id,refInFor:!0,on:{append:function(e){return t.add(e,s+1)},chooseToAppend:function(e){return t.choose(s+1)},chooseToConvert:function(e){return t.chooseToConvert(i)},chooseToPrepend:function(e){return t.choose(s)},close:function(e){t.isEditing=!1},copy:function(e){return t.copy()},duplicate:function(e){return t.duplicate(i,s)},focus:function(e){return t.onFocus(i)},hide:function(e){return t.hide(i)},merge:function(e){return t.merge()},open:function(e){t.isEditing=!0},paste:function(e){return t.pasteboard()},prepend:function(e){return t.add(e,s)},remove:function(e){return t.remove(i)},removeSelected:t.removeSelected,show:function(e){return t.show(i)},selectDown:t.selectDown,selectUp:t.selectUp,sortDown:function(e){return t.sort(i,s,s+1)},sortUp:function(e){return t.sort(i,s,s-1)},split:function(e){return t.split(i,s,e)},update:function(e){return t.update(i,e)}},nativeOn:{click:function(e){return t.onClickBlock(i,e)}}},"k-block",{...i,disabled:t.disabled,endpoints:t.endpoints,fieldset:t.fieldset(i),isBatched:t.isSelected(i)&&t.selected.length>1,isFull:t.isFull,isHidden:!0===i.isHidden,isLastSelected:t.isLastSelected(i),isMergable:t.isMergable,isSelected:t.isSelected(i),next:t.prevNext(s+1),prev:t.prevNext(s-1)},!1))})),1)]:e("k-empty",{attrs:{icon:"box"}},[t._v(" "+t._s(t.$t("field.blocks.fieldsets.empty"))+" ")])],2)}),[]).exports;const ii=ct({inheritAttrs:!1,emits:["close","paste","submit"],computed:{shortcut(){return this.$helper.keyboard.metaKey()+"+v"}},methods:{paste(t){this.$emit("close"),this.$emit("paste",t)}}},(function(){var t=this,e=t._self._c;return e("k-dialog",{ref:"dialog",staticClass:"k-block-importer",attrs:{"cancel-button":!1,"submit-button":!1,visible:!0,size:"large"},on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit")}}},[e("label",{attrs:{for:"pasteboard"},domProps:{innerHTML:t._s(t.$t("field.blocks.fieldsets.paste",{shortcut:t.shortcut}))}}),e("textarea",{attrs:{id:"pasteboard"},on:{paste:function(e){return e.preventDefault(),t.paste.apply(null,arguments)}}})])}),[]).exports;const si=ct({inheritAttrs:!1,props:{disabledFieldsets:{default:()=>[],type:Array},fieldsets:{type:Object},fieldsetGroups:{type:Object},headline:{type:String},size:{type:String,default:"medium"},value:{default:null,type:String}},emits:["cancel","close","input","paste","submit"],data:()=>({selected:null}),computed:{groups(){const t={};let e=0;const i=this.fieldsetGroups??{blocks:{label:this.$t("field.blocks.fieldsets.label"),sets:Object.keys(this.fieldsets)}};for(const s in i){const n=i[s];n.open=!1!==n.open,n.fieldsets=n.sets.filter((t=>this.fieldsets[t])).map((t=>(e++,{...this.fieldsets[t],index:e}))),0!==n.fieldsets.length&&(t[s]=n)}return t},shortcut(){return this.$helper.keyboard.metaKey()+"+v"}},mounted(){this.$events.on("paste",this.paste)},destroyed(){this.$events.off("paste",this.paste)},methods:{paste(t){this.$emit("paste",t),this.$emit("close")}}},(function(){var t=this,e=t._self._c;return e("k-dialog",{staticClass:"k-block-selector",attrs:{"cancel-button":!1,size:t.size,"submit-button":!1,visible:!0},on:{cancel:function(e){return t.$emit("cancel")},submit:function(e){return t.$emit("submit",t.value)}}},[t.headline?e("k-headline",[t._v(" "+t._s(t.headline)+" ")]):t._e(),t._l(t.groups,(function(i,s){return e("details",{key:s,attrs:{open:i.open}},[e("summary",[t._v(t._s(i.label))]),e("k-navigate",{staticClass:"k-block-types"},t._l(i.fieldsets,(function(i){return e("k-button",{key:i.name,attrs:{disabled:t.disabledFieldsets.includes(i.type),icon:i.icon??"box",text:i.name,size:"lg"},on:{click:function(e){return t.$emit("submit",i.type)}},nativeOn:{focus:function(e){return t.$emit("input",i.type)}}})})),1)],1)})),e("p",{staticClass:"k-clipboard-hint",domProps:{innerHTML:t._s(t.$t("field.blocks.fieldsets.paste",{shortcut:t.shortcut}))}})],2)}),[]).exports;const ni=ct({props:{value:String}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-block-background-dropdown"},[e("k-button",{attrs:{dropdown:!0,size:"xs",variant:"filled"},on:{click:function(e){return t.$refs.dropdown.toggle()}}},[e("k-color-frame",{attrs:{color:t.value,ratio:"1/1"}})],1),e("k-dropdown-content",{ref:"dropdown",attrs:{"align-x":"end",options:[{text:t.$t("field.blocks.figure.back.plain"),click:"var(--color-white)"},{text:t.$t("field.blocks.figure.back.pattern.light"),click:"var(--pattern-light)"},{text:t.$t("field.blocks.figure.back.pattern.dark"),click:"var(--pattern)"}]},on:{action:function(e){return t.$emit("input",e)}}})],1)}),[]).exports;const oi=ct({inheritAttrs:!1,props:{back:String,caption:String,captionMarks:{default:!0,type:[Boolean,Array]},disabled:Boolean,isEmpty:Boolean,emptyIcon:String,emptyText:String},emits:["open","update"]},(function(){var t=this,e=t._self._c;return e("figure",{staticClass:"k-block-figure",style:{"--block-figure-back":t.back},attrs:{"data-empty":t.isEmpty}},[t.isEmpty?e("k-button",{staticClass:"k-block-figure-empty",attrs:{disabled:t.disabled,icon:t.emptyIcon,text:t.emptyText},on:{click:function(e){return t.$emit("open")}}}):e("span",{staticClass:"k-block-figure-container",attrs:{"data-disabled":t.disabled},on:{dblclick:function(e){return t.$emit("open")}}},[t._t("default")],2),t.caption?e("k-block-figure-caption",{attrs:{disabled:t.disabled,marks:t.captionMarks,value:t.caption},on:{input:function(e){return t.$emit("update",{caption:e})}}}):t._e()],1)}),[]).exports;const ai=ct({props:{disabled:Boolean,marks:[Array,Boolean],value:String}},(function(){var t=this,e=t._self._c;return e("figcaption",{staticClass:"k-block-figure-caption"},[e("k-writer",{attrs:{disabled:t.disabled,inline:!0,marks:t.marks,spellcheck:!1,value:t.value},on:{input:function(e){return t.$emit("input",e)}}})],1)}),[]).exports;const ri=ct({extends:Ge,computed:{placeholder(){return this.field("code",{}).placeholder},languages(){return this.field("language",{options:[]}).options}},methods:{focus(){this.$refs.code.focus()}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-block-type-code-editor"},[e("k-input",{ref:"code",attrs:{buttons:!1,disabled:t.disabled,placeholder:t.placeholder,spellcheck:!1,value:t.content.code,font:"monospace",type:"textarea"},on:{input:function(e){return t.update({code:e})}}}),t.languages.length?e("div",{staticClass:"k-block-type-code-editor-language"},[e("k-input",{ref:"language",attrs:{disabled:t.disabled,empty:!1,options:t.languages,value:t.content.language,icon:"code",type:"select"},on:{input:function(e){return t.update({language:e})}}})],1):t._e()],1)}),[]).exports;const li=ct({extends:Ge,props:{tabs:Object},data(){return{collapsed:this.state(),tab:Object.keys(this.tabs)[0]}},computed:{fields(){var t;return null==(t=this.tabs[this.tab])?void 0:t.fields},values(){return Object.assign({},this.content)}},methods:{open(){this.$emit("open",this.tab)},state(t){const e=`kirby.fieldsBlock.${this.endpoints.field}.${this.id}`;if(void 0===t)return JSON.parse(sessionStorage.getItem(e));sessionStorage.setItem(e,t)},toggle(){this.collapsed=!this.collapsed,this.state(this.collapsed)}}},(function(){var t=this,e=t._self._c;return e("div",{attrs:{"data-collapsed":t.collapsed},on:{dblclick:function(e){!t.fieldset.wysiwyg&&t.$emit("open")}}},[e("header",{staticClass:"k-block-type-fields-header"},[e("k-block-title",{attrs:{content:t.values,fieldset:t.fieldset},nativeOn:{click:function(e){return t.toggle.apply(null,arguments)}}}),t.collapsed?t._e():e("k-drawer-tabs",{attrs:{tab:t.tab,tabs:t.fieldset.tabs},on:{open:function(e){t.tab=e}}})],1),t.collapsed?t._e():e("k-form",{ref:"form",staticClass:"k-block-type-fields-form",attrs:{autofocus:!0,disabled:t.disabled||!t.fieldset.wysiwyg,fields:t.fields,value:t.values},on:{input:function(e){return t.$emit("update",e)}}})],1)}),[]).exports;const ci=ct({extends:Ge,data(){return{back:this.onBack()??"white"}},computed:{captionMarks(){return this.field("caption",{marks:!0}).marks},crop(){return this.content.crop},isEmpty(){var t;return!(null==(t=this.content.images)?void 0:t.length)},ratio(){return this.content.ratio}},methods:{onBack(t){const e=`kirby.galleryBlock.${this.endpoints.field}.${this.id}`;if(void 0===t)return sessionStorage.getItem(e);this.back=t,sessionStorage.setItem(e,t)}}},(function(){var t=this,e=t._self._c;return e("figure",{staticClass:"k-block-type-gallery-figure",style:{"--block-back":t.back},attrs:{"data-empty":t.isEmpty}},[e("ul",{on:{dblclick:t.open}},[t.isEmpty?t._l(3,(function(i){return e("li",{key:i,staticClass:"k-block-type-gallery-placeholder"},[e("k-image-frame",{staticClass:"k-block-type-gallery-frame",attrs:{ratio:t.ratio}})],1)})):[t._l(t.content.images,(function(i){return e("li",{key:i.id},[e("k-image-frame",{staticClass:"k-block-type-gallery-frame",attrs:{ratio:t.ratio,cover:t.crop,src:i.url,srcset:i.image.srcset,alt:i.alt}})],1)})),e("k-block-background-dropdown",{attrs:{value:t.back},on:{input:t.onBack}})]],2),t.content.caption?e("k-block-figure-caption",{attrs:{disabled:t.disabled,marks:t.captionMarks,value:t.content.caption},on:{input:function(e){return t.$emit("update",{caption:e})}}}):t._e()],1)}),[]).exports;const ui=ct({extends:Ge,inheritAttrs:!1,emits:["append","open","split","update"],computed:{isSplitable(){return this.content.text.length>0&&!1===this.$refs.input.isCursorAtStart&&!1===this.$refs.input.isCursorAtEnd},keys(){return{Enter:()=>!0===this.$refs.input.isCursorAtEnd?this.$emit("append","text"):this.split(),"Mod-Enter":this.split}},levels(){return this.field("level",{options:[]}).options},textField(){return this.field("text",{marks:!0})}},methods:{focus(){this.$refs.input.focus()},merge(t){this.update({text:t.map((t=>t.content.text)).join(" ")})},split(){var t,e;const i=null==(e=(t=this.$refs.input).getSplitContent)?void 0:e.call(t);i&&this.$emit("split",[{text:i[0]},{level:"h"+Math.min(parseInt(this.content.level.slice(1))+1,6),text:i[1]}])}}},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"k-block-type-heading-input",attrs:{"data-level":t.content.level}},[e("k-writer",t._b({ref:"input",attrs:{disabled:t.disabled,inline:!0,keys:t.keys,value:t.content.text},on:{input:function(e){return t.update({text:e})}}},"k-writer",t.textField,!1)),t.levels.length>1?e("k-input",{ref:"level",staticClass:"k-block-type-heading-level",attrs:{disabled:t.disabled,empty:!1,options:t.levels,value:t.content.level,type:"select"},on:{input:function(e){return t.update({level:e})}}}):t._e()],1)}),[]).exports;const di=ct({extends:Ge,data(){return{back:this.onBack()??"white"}},computed:{captionMarks(){return this.field("caption",{marks:!0}).marks},crop(){return this.content.crop??!1},src(){var t,e;return"web"===this.content.location?this.content.src:!!(null==(e=null==(t=this.content.image)?void 0:t[0])?void 0:e.url)&&this.content.image[0].url},ratio(){return this.content.ratio??!1}},methods:{onBack(t){const e=`kirby.imageBlock.${this.endpoints.field}.${this.id}`;if(void 0===t)return sessionStorage.getItem(e);this.back=t,sessionStorage.setItem(e,t)}}},(function(){var t=this,e=t._self._c;return e("k-block-figure",{attrs:{back:t.back,caption:t.content.caption,"caption-marks":t.captionMarks,"empty-text":t.$t("field.blocks.image.placeholder")+" …",disabled:t.disabled,"is-empty":!t.src,"empty-icon":"image"},on:{open:t.open,update:t.update}},[t.src?[t.ratio?e("k-image-frame",{attrs:{ratio:t.ratio,cover:t.crop,alt:t.content.alt,src:t.src}}):e("img",{staticClass:"k-block-type-image-auto",attrs:{alt:t.content.alt,src:t.src}}),e("k-block-background-dropdown",{attrs:{value:t.back},on:{input:t.onBack}})]:t._e()],2)}),[]).exports;const pi=ct({},(function(){return this._self._c,this._m(0)}),[function(){var t=this._self._c;return t("div",[t("hr")])}]).exports;const hi=ct({extends:Ge,emits:["open","split","update"],computed:{isSplitable(){return this.content.text.length>0&&!1===this.input().isCursorAtStart&&!1===this.input().isCursorAtEnd},keys(){return{"Mod-Enter":this.split}},marks(){return this.field("text",{}).marks}},methods:{focus(){this.$refs.input.focus()},input(){return this.$refs.input.$refs.input.$refs.input},merge(t){this.update({text:t.map((t=>t.content.text)).join("").replaceAll("

")},{text:i[1].replace(/^(