umberto 7.0.2 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -1798
- package/LICENSE.md +44 -5
- package/README.md +194 -9
- package/package.json +4 -8
- package/scripts/filter/after-post-render/gloria/append-copy-heading-buttons.js +90 -0
- package/scripts/filter/after-post-render/gloria/apply-design-doc-classes.js +145 -0
- package/scripts/filter/after-post-render/gloria/wrap-table-into-wrappers.js +30 -0
- package/scripts/filter/after-post-render/img-linker.js +1 -1
- package/scripts/filter/after-post-render/insert-error-codes.js +1 -1
- package/scripts/filter/after-post-render/linker.js +1 -1
- package/scripts/filter/after-post-render/parseicontag.js +1 -1
- package/scripts/filter/after-post-render/snippets.js +5 -1
- package/scripts/filter/after-render/gloria/inline-svg.js +14 -0
- package/scripts/filter/after-render/gloria/spritesheet-svg.js +14 -0
- package/scripts/filter/before-post-render/add-project-info-to-page.js +1 -1
- package/scripts/filter/before-post-render/code-switcher.js +4 -0
- package/scripts/filter/before-post-render/execute-and-insert-function-results.js +3 -1
- package/scripts/filter/before-post-render/gloria/add-breadcrumbs-data-to-page.js +276 -0
- package/scripts/filter/before-post-render/gloria/prerender-admonitions.js +27 -0
- package/scripts/filter/before-post-render/gloria/prerender-xml-pug-components.js +352 -0
- package/scripts/filter/before-post-render/gloria/render-post-render-pug-components.js +102 -0
- package/scripts/filter/before-post-render/set-layout.js +4 -2
- package/scripts/helper/parse-href.js +28 -0
- package/scripts/helper/u-capitalize.js +13 -0
- package/scripts/helper/u-extract-and-cache-title.js +36 -0
- package/scripts/helper/u-random-id.js +16 -0
- package/scripts/helper/u-remove-indentation.js +13 -0
- package/scripts/helper/u-toc.js +2 -63
- package/scripts/utils/add-indention.js +16 -0
- package/scripts/utils/capitalize.js +17 -0
- package/scripts/utils/concat-url-parts.js +19 -0
- package/scripts/utils/decode-html-entities.js +25 -0
- package/scripts/utils/drop-init-slash.js +14 -0
- package/scripts/utils/drop-trailing-slash.js +14 -0
- package/scripts/utils/drop-url-protocol.js +10 -0
- package/scripts/utils/inline-svg.js +152 -0
- package/scripts/utils/measure-call.js +16 -0
- package/scripts/utils/parse-href.js +37 -0
- package/scripts/utils/parseicontag.js +1 -1
- package/scripts/utils/parselinks.js +27 -6
- package/scripts/utils/parser-cursor.js +280 -0
- package/scripts/utils/pipe.js +17 -0
- package/scripts/utils/pug-renderer/create-prerender-pug-template.js +185 -0
- package/scripts/utils/pug-renderer/render-pug-component.js +73 -0
- package/scripts/utils/pug-to-xml-binding/parser/walk-xml-tree.js +150 -0
- package/scripts/utils/pug-to-xml-binding/parser/xml-components-parser.js +414 -0
- package/scripts/utils/pug-to-xml-binding/render-xml-pug-components-in-markdown.js +193 -0
- package/scripts/utils/pug-to-xml-binding/transform-xml-tree-to-pug.js +144 -0
- package/scripts/utils/random-id.js +75 -0
- package/scripts/utils/remove-indentation.js +48 -0
- package/scripts/utils/spritesheet-svg.js +183 -0
- package/scripts/utils/toc.js +71 -0
- package/scripts/utils/transform-markdown-admonitions.js +98 -0
- package/scripts/utils/uniq-by-last.js +32 -0
- package/src/api-builder/api-builder.js +49 -18
- package/src/api-builder/classes/description-parser.js +61 -10
- package/src/api-builder/classes/doc-data-factory.js +2 -2
- package/src/helpers/github-url.js +1 -1
- package/src/helpers/templates/scripts/default.js +1 -1
- package/src/helpers/templates/scripts/group.js +1 -1
- package/src/hexo/filter/project-locals.js +12 -0
- package/src/hexo/get-repo-urls.js +1 -1
- package/src/hexo/project-globals.js +4 -0
- package/src/hexo-manager.js +7 -2
- package/src/sdk-builder/sdk-builder.js +4 -4
- package/src/tasks/build-api-docs.js +6 -6
- package/src/tasks/build-documentation.js +57 -24
- package/src/tasks/cache-files.js +2 -2
- package/src/tasks/compile-sass.js +12 -0
- package/src/tasks/copy-assets.js +4 -0
- package/src/tasks/copy-project-icons.js +1 -1
- package/src/tasks/get-extra-files.js +1 -1
- package/src/tasks/get-project-config.js +1 -1
- package/src/tasks/overwrite-api-guides.js +1 -1
- package/src/tasks/validate-links.js +211 -39
- package/themes/umberto/layout/gloria/404.pug +25 -16
- package/themes/umberto/layout/gloria/_api-docs/_header/_style.scss +31 -0
- package/themes/umberto/layout/gloria/_api-docs/_header/index.pug +50 -0
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_api-see-source.pug +1 -4
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_api-tree-item.pug +42 -26
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_class-item.pug +20 -13
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_dev-names.pug +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_error.pug +10 -5
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_hierarchy-list.pug +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_link-or-text.pug +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_method.pug +45 -39
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_property.pug +26 -20
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_related.pug +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_toc-list-item.pug +11 -0
- package/themes/umberto/layout/gloria/_api-docs/_partial/api-subheader.pug +0 -11
- package/themes/umberto/layout/gloria/_api-docs/_partial/api-toc.pug +33 -0
- package/themes/umberto/layout/gloria/_api-docs/_partial/classes.pug +5 -4
- package/themes/umberto/layout/gloria/_api-docs/_partial/config-options.pug +5 -4
- package/themes/umberto/layout/gloria/_api-docs/_partial/constants.pug +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_partial/description.pug +2 -2
- package/themes/umberto/layout/gloria/_api-docs/_partial/events.pug +5 -4
- package/themes/umberto/layout/gloria/_api-docs/_partial/functions.pug +5 -4
- package/themes/umberto/layout/gloria/_api-docs/_partial/interfaces.pug +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_partial/methods.pug +14 -13
- package/themes/umberto/layout/gloria/_api-docs/_partial/namespaces.pug +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_partial/navtree.pug +4 -11
- package/themes/umberto/layout/gloria/_api-docs/_partial/properties.pug +14 -13
- package/themes/umberto/layout/gloria/_api-docs/_partial/type-parameters.pug +15 -12
- package/themes/umberto/layout/gloria/_api-docs/_partial/typedefs.pug +5 -4
- package/themes/umberto/layout/gloria/_api-docs/_subheader/_style.scss +5 -0
- package/themes/umberto/layout/gloria/_api-docs/_subheader/index.pug +10 -0
- package/themes/umberto/layout/gloria/_api-docs/_toc/_style.scss +229 -0
- package/themes/umberto/layout/gloria/_api-docs/_toc/index.pug +11 -0
- package/themes/umberto/layout/gloria/_api-docs/api-base.pug +24 -24
- package/themes/umberto/layout/gloria/_api-docs/class.pug +4 -4
- package/themes/umberto/layout/gloria/_api-docs/errors.pug +3 -3
- package/themes/umberto/layout/gloria/_api-docs/index.pug +3 -0
- package/themes/umberto/layout/gloria/_api-docs/interface.pug +4 -4
- package/themes/umberto/layout/gloria/_api-docs/mixin.pug +4 -4
- package/themes/umberto/layout/gloria/_api-docs/module.pug +4 -4
- package/themes/umberto/layout/gloria/_api-docs/namespace.pug +4 -4
- package/themes/umberto/layout/gloria/_api-docs/typedef.pug +22 -22
- package/themes/umberto/layout/gloria/_components/badge/_style.scss +27 -0
- package/themes/umberto/layout/gloria/_components/badge/index.pug +30 -0
- package/themes/umberto/layout/gloria/_components/banner/_style.scss +133 -0
- package/themes/umberto/layout/gloria/_components/banner/index.pug +3 -0
- package/themes/umberto/layout/gloria/_components/button/_style.scss +183 -0
- package/themes/umberto/layout/gloria/_components/button/index.pug +140 -0
- package/themes/umberto/layout/gloria/_components/callout/_style.scss +56 -0
- package/themes/umberto/layout/gloria/_components/callout/index.pug +87 -0
- package/themes/umberto/layout/gloria/_components/card/_style.scss +101 -0
- package/themes/umberto/layout/gloria/_components/card/index.pug +131 -0
- package/themes/umberto/layout/gloria/_components/card-learn-more-links/_style.scss +9 -0
- package/themes/umberto/layout/gloria/_components/card-learn-more-links/index.pug +56 -0
- package/themes/umberto/layout/gloria/_components/checkbox/_style.scss +117 -0
- package/themes/umberto/layout/gloria/_components/checkbox/index.pug +35 -0
- package/themes/umberto/layout/gloria/_components/cke5-code-switcher/index.pug +39 -0
- package/themes/umberto/layout/gloria/_components/code-block/_style.scss +111 -0
- package/themes/umberto/layout/gloria/_components/code-block/index.pug +75 -0
- package/themes/umberto/layout/gloria/_components/code-switcher/_style.scss +36 -0
- package/themes/umberto/layout/gloria/_components/code-switcher/index.pug +31 -0
- package/themes/umberto/layout/gloria/_components/columns/_style.scss +54 -0
- package/themes/umberto/layout/gloria/_components/columns/index.pug +30 -0
- package/themes/umberto/layout/gloria/_components/divider/_style.scss +6 -0
- package/themes/umberto/layout/gloria/_components/divider/index.pug +13 -0
- package/themes/umberto/layout/gloria/_components/dropdown/_style.scss +88 -0
- package/themes/umberto/layout/gloria/_components/dropdown/index.pug +77 -0
- package/themes/umberto/layout/gloria/_components/fake-devtools/_style.scss +233 -0
- package/themes/umberto/layout/gloria/_components/fake-devtools/index.pug +27 -0
- package/themes/umberto/layout/gloria/_components/heading-badge/index.pug +17 -0
- package/themes/umberto/layout/gloria/_components/heading-link/_style.scss +47 -0
- package/themes/umberto/layout/gloria/_components/heading-link/index.pug +26 -0
- package/themes/umberto/layout/gloria/_components/icon/_style.scss +12 -0
- package/themes/umberto/layout/gloria/_components/icon/index.pug +75 -0
- package/themes/umberto/layout/gloria/_components/icon-message/_style.scss +13 -0
- package/themes/umberto/layout/gloria/_components/icon-message/index.pug +17 -0
- package/themes/umberto/layout/gloria/_components/iframe/_style.scss +10 -0
- package/themes/umberto/layout/gloria/_components/iframe/index.pug +22 -0
- package/themes/umberto/layout/gloria/_components/img/index.pug +17 -0
- package/themes/umberto/layout/gloria/_components/index.pug +32 -0
- package/themes/umberto/layout/gloria/_components/input/_style.scss +82 -0
- package/themes/umberto/layout/gloria/_components/input/index.pug +34 -0
- package/themes/umberto/layout/gloria/_components/json-ld/index.pug +3 -0
- package/themes/umberto/layout/gloria/_components/keyboard-shortcut/_style.scss +49 -0
- package/themes/umberto/layout/gloria/_components/keyboard-shortcut/index.pug +23 -0
- package/themes/umberto/layout/gloria/_components/menu-dropdown/_style.scss +27 -0
- package/themes/umberto/layout/gloria/_components/menu-dropdown/index.pug +40 -0
- package/themes/umberto/layout/gloria/_components/mobile-overlay/_style.scss +70 -0
- package/themes/umberto/layout/gloria/_components/mobile-overlay/index.pug +37 -0
- package/themes/umberto/layout/gloria/_components/nav-tree/_style.scss +104 -0
- package/themes/umberto/layout/gloria/_components/nav-tree/index.pug +6 -0
- package/themes/umberto/layout/gloria/_components/nav-tree/nav-tree-item.pug +27 -0
- package/themes/umberto/layout/gloria/_components/nav-tree/nav-tree-level.pug +58 -0
- package/themes/umberto/layout/gloria/_components/skeleton/_style.scss +22 -0
- package/themes/umberto/layout/gloria/_components/skeleton/index.pug +16 -0
- package/themes/umberto/layout/gloria/_components/snippet-footer/_style.scss +26 -0
- package/themes/umberto/layout/gloria/_components/snippet-footer/index.pug +10 -0
- package/themes/umberto/layout/gloria/_components/spacer/_style.scss +9 -0
- package/themes/umberto/layout/gloria/_components/spacer/index.pug +19 -0
- package/themes/umberto/layout/gloria/_components/svg/index.pug +70 -0
- package/themes/umberto/layout/gloria/_components/tabs/_style.scss +80 -0
- package/themes/umberto/layout/gloria/_components/tabs/index.pug +81 -0
- package/themes/umberto/layout/gloria/_components/tag/_style.scss +79 -0
- package/themes/umberto/layout/gloria/_components/tag/index.pug +17 -0
- package/themes/umberto/layout/gloria/_components/tooltip-popover/_style.scss +194 -0
- package/themes/umberto/layout/gloria/_components/tooltip-popover/index.pug +38 -0
- package/themes/umberto/layout/gloria/_head/head-preloads.pug +32 -0
- package/themes/umberto/layout/gloria/{_partial → _head}/head.pug +8 -4
- package/themes/umberto/layout/gloria/_head/index.pug +1 -0
- package/themes/umberto/layout/gloria/_modules/algolia-search/_style.scss +202 -0
- package/themes/umberto/layout/gloria/_modules/algolia-search/_third-party.scss +1 -0
- package/themes/umberto/layout/gloria/_modules/algolia-search/index.pug +39 -0
- package/themes/umberto/layout/gloria/_modules/breadcrumbs/_style.scss +68 -0
- package/themes/umberto/layout/gloria/_modules/breadcrumbs/index.pug +18 -0
- package/themes/umberto/layout/gloria/_modules/footer/_style.scss +40 -0
- package/themes/umberto/layout/gloria/_modules/footer/index.pug +87 -0
- package/themes/umberto/layout/gloria/_modules/header/_style.scss +181 -0
- package/themes/umberto/layout/gloria/_modules/header/index.pug +70 -0
- package/themes/umberto/layout/gloria/_modules/header/nav-link.pug +19 -0
- package/themes/umberto/layout/gloria/_modules/header/nav-links.pug +11 -0
- package/themes/umberto/layout/gloria/_modules/header/nav-project-select-dropdown.pug +16 -0
- package/themes/umberto/layout/gloria/_modules/header/nav-suffix-links.pug +20 -0
- package/themes/umberto/layout/gloria/_modules/header-bar/_style.scss +56 -0
- package/themes/umberto/layout/gloria/_modules/header-bar/index.pug +40 -0
- package/themes/umberto/layout/gloria/_modules/header-legacy-warning/index.pug +11 -0
- package/themes/umberto/layout/gloria/_modules/header-nightly-info/index.pug +21 -0
- package/themes/umberto/layout/gloria/_modules/header-promobar/index.pug +18 -0
- package/themes/umberto/layout/gloria/_modules/index.pug +14 -0
- package/themes/umberto/layout/gloria/_modules/main/_style.scss +54 -0
- package/themes/umberto/layout/gloria/_modules/main/index.pug +10 -0
- package/themes/umberto/layout/gloria/_modules/mobile-nav/_style.scss +106 -0
- package/themes/umberto/layout/gloria/_modules/mobile-nav/index.pug +121 -0
- package/themes/umberto/layout/gloria/_modules/mobile-nav/slide-parts.pug +67 -0
- package/themes/umberto/layout/gloria/_modules/not-found/_style.scss +38 -0
- package/themes/umberto/layout/gloria/_modules/not-found/index.pug +16 -0
- package/themes/umberto/layout/gloria/_modules/sidebar/_style.scss +147 -0
- package/themes/umberto/layout/gloria/_modules/sidebar/index.pug +24 -0
- package/themes/umberto/layout/gloria/_modules/sidebar-api/_style.scss +2 -0
- package/themes/umberto/layout/gloria/_modules/sidebar-api/index.pug +6 -0
- package/themes/umberto/layout/gloria/_modules/toc/_style.scss +201 -0
- package/themes/umberto/layout/gloria/_modules/toc/index.pug +10 -0
- package/themes/umberto/layout/gloria/_trackers/google-tag-manager.pug +14 -0
- package/themes/umberto/layout/gloria/_trackers/index.pug +2 -0
- package/themes/umberto/layout/gloria/api.pug +42 -20
- package/themes/umberto/layout/gloria/base.pug +23 -32
- package/themes/umberto/layout/gloria/index.pug +19 -13
- package/themes/umberto/layout/gloria/page.pug +30 -11
- package/themes/umberto/layout/gloria/sdk.pug +1 -1
- package/themes/umberto/layout/gloria/theme.pug +304 -0
- package/themes/umberto/layout/umberto/404.pug +0 -1
- package/themes/umberto/layout/umberto/_partial/report-issue-widget.pug +0 -3
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-Bold.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-Bold.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-BoldItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-BoldItalic.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-Italic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-Italic.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-Regular.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Lato/Lato-Regular.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Menlo/Menlo-Regular.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Menlo/Menlo-Regular.woff +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/Mulish-Italic-VariableFont_wght.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/Mulish-Italic-VariableFont_wght.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/Mulish-VariableFont_wght.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/Mulish-VariableFont_wght.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-Black.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-BlackItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-Bold.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-BoldItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-ExtraBold.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-ExtraBoldItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-ExtraLight.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-ExtraLightItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-Italic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-Light.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-LightItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-Medium.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-MediumItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-Regular.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-SemiBold.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Mulish/static/Mulish-SemiBoldItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/PublicSans-Italic-VariableFont_wght.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/PublicSans-Italic-VariableFont_wght.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/PublicSans-VariableFont_wght.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/PublicSans-VariableFont_wght.woff2 +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-Black.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-BlackItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-Bold.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-BoldItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-ExtraBold.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-ExtraBoldItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-ExtraLight.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-ExtraLightItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-Italic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-Light.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-LightItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-Medium.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-MediumItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-Regular.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-SemiBold.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-SemiBoldItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-Thin.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_fonts/Public_Sans/static/PublicSans-ThinItalic.ttf +0 -0
- package/themes/umberto/source/gloria/assets/_img/404-billboard.svg +181 -0
- package/themes/umberto/source/gloria/assets/_img/ckeditor-logo.svg +15 -0
- package/themes/umberto/source/gloria/assets/_img/hex-bg-2.svg +10 -0
- package/themes/umberto/source/gloria/assets/_img/hex-bg.svg +10 -0
- package/themes/umberto/source/gloria/assets/_img/icons/api-class.svg +10 -0
- package/themes/umberto/source/gloria/assets/_img/icons/api-folder.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/api-interface.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/api-module.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/api-package.svg +4 -0
- package/themes/umberto/source/gloria/assets/_img/icons/api-typedef.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/bulb.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/check-circle.svg +4 -0
- package/themes/umberto/source/gloria/assets/_img/icons/check.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/chevron-down.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/chevron-right.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/close-circle.svg +4 -0
- package/themes/umberto/source/gloria/assets/_img/icons/close.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/copy.svg +10 -0
- package/themes/umberto/source/gloria/assets/_img/icons/dislike.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/download.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/edit.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/exclamation-circle.svg +4 -0
- package/themes/umberto/source/gloria/assets/_img/icons/experiment.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/export.svg +4 -0
- package/themes/umberto/source/gloria/assets/_img/icons/eye.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/filter.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/github.svg +10 -0
- package/themes/umberto/source/gloria/assets/_img/icons/info-circle.svg +4 -0
- package/themes/umberto/source/gloria/assets/_img/icons/like.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/link.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/lock.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/menu-fold.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/menu-list.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/menu.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/more.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/notification.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/number.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/premium.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/right.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/search.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/sparkles.svg +1 -0
- package/themes/umberto/source/gloria/assets/_img/icons/status.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/trash.svg +3 -0
- package/themes/umberto/source/gloria/assets/_img/icons/unordered-list.svg +5 -0
- package/themes/umberto/source/gloria/assets/_img/icons/warning.svg +10 -0
- package/themes/umberto/src/gloria/css/_fonts.scss +90 -0
- package/themes/umberto/src/gloria/css/_layers.scss +1 -0
- package/themes/umberto/src/gloria/css/_normalize.scss +118 -0
- package/themes/umberto/src/gloria/css/a11y/_focusable.scss +7 -0
- package/themes/umberto/src/gloria/css/a11y/_index.scss +4 -0
- package/themes/umberto/src/gloria/css/a11y/_mixins.scss +32 -0
- package/themes/umberto/src/gloria/css/a11y/_reduce-motion.scss +9 -0
- package/themes/umberto/src/gloria/css/a11y/_screen-reader.scss +15 -0
- package/themes/umberto/src/gloria/css/base/_buttons.scss +13 -0
- package/themes/umberto/src/gloria/css/base/_descriptions-list.scss +33 -0
- package/themes/umberto/src/gloria/css/base/_details.scss +7 -0
- package/themes/umberto/src/gloria/css/base/_headings.scss +111 -0
- package/themes/umberto/src/gloria/css/base/_iframes.scss +7 -0
- package/themes/umberto/src/gloria/css/base/_index.scss +12 -0
- package/themes/umberto/src/gloria/css/base/_inline-code.scss +16 -0
- package/themes/umberto/src/gloria/css/base/_links.scss +31 -0
- package/themes/umberto/src/gloria/css/base/_lists.scss +58 -0
- package/themes/umberto/src/gloria/css/base/_mixins.scss +3 -0
- package/themes/umberto/src/gloria/css/base/_paragraphs.scss +15 -0
- package/themes/umberto/src/gloria/css/base/_tables.scss +64 -0
- package/themes/umberto/src/gloria/css/base/_typography.scss +62 -0
- package/themes/umberto/src/gloria/css/components/_api-collapsing-list.scss +152 -0
- package/themes/umberto/src/gloria/css/components/_api-filter-dropdown.scss +17 -0
- package/themes/umberto/src/gloria/css/components/_api-item-heading.scss +58 -0
- package/themes/umberto/src/gloria/css/components/_api-tree.scss +202 -0
- package/themes/umberto/src/gloria/css/components/_hierarchy-list.scss +35 -0
- package/themes/umberto/src/gloria/css/components/_image-zoom.scss +13 -0
- package/themes/umberto/src/gloria/css/components/_index.scss +56 -0
- package/themes/umberto/src/gloria/css/components/_notification.scss +36 -0
- package/themes/umberto/src/gloria/css/components/_utils.scss +5 -0
- package/themes/umberto/src/gloria/css/doc/_details.scss +11 -0
- package/themes/umberto/src/gloria/css/doc/_editor-icons.scss +21 -0
- package/themes/umberto/src/gloria/css/doc/_images.scss +9 -0
- package/themes/umberto/src/gloria/css/doc/_index.scss +5 -0
- package/themes/umberto/src/gloria/css/doc/_snippets.scss +127 -0
- package/themes/umberto/src/gloria/css/doc/_typography.scss +5 -0
- package/themes/umberto/src/gloria/css/layout/_base.scss +17 -0
- package/themes/umberto/src/gloria/css/layout/_breakpoints.scss +88 -0
- package/themes/umberto/src/gloria/css/layout/_container.scss +38 -0
- package/themes/umberto/src/gloria/css/layout/_index.scss +6 -0
- package/themes/umberto/src/gloria/css/layout/_layout.scss +64 -0
- package/themes/umberto/src/gloria/css/layout/_mixins.scss +34 -0
- package/themes/umberto/src/gloria/css/layout/_zindex.scss +12 -0
- package/themes/umberto/src/gloria/css/modules/_index.scss +29 -0
- package/themes/umberto/src/gloria/css/modules/_utils.scss +7 -0
- package/themes/umberto/src/gloria/css/styles.scss +11 -117
- package/themes/umberto/src/gloria/css/theme/_light.scss +344 -0
- package/themes/umberto/src/gloria/css/utilities/_animation.scss +32 -0
- package/themes/umberto/src/gloria/css/utilities/_colors.scss +14 -0
- package/themes/umberto/src/gloria/css/utilities/_display.scss +13 -0
- package/themes/umberto/src/gloria/css/utilities/_flex.scss +33 -0
- package/themes/umberto/src/gloria/css/utilities/_gap.scss +8 -0
- package/themes/umberto/src/gloria/css/utilities/_index.scss +11 -0
- package/themes/umberto/src/gloria/css/utilities/_radius.scss +21 -0
- package/themes/umberto/src/gloria/css/utilities/_rotation.scss +8 -0
- package/themes/umberto/src/gloria/css/utilities/_shadows.scss +13 -0
- package/themes/umberto/src/gloria/css/utilities/_spacing.scss +97 -0
- package/themes/umberto/src/gloria/css/utilities/_stop-scrolling.scss +9 -0
- package/themes/umberto/src/gloria/css/utilities/_text.scss +42 -0
- package/themes/umberto/src/gloria/js/app.js +92 -54
- package/themes/umberto/src/gloria/js/components/api-nav-tree.js +171 -0
- package/themes/umberto/src/gloria/js/components/api-toggle.js +92 -0
- package/themes/umberto/src/gloria/js/components/base-component.js +41 -0
- package/themes/umberto/src/gloria/js/components/breadcrumbs.js +115 -0
- package/themes/umberto/src/gloria/js/components/code-block.js +229 -0
- package/themes/umberto/src/gloria/js/components/code-switcher.js +177 -0
- package/themes/umberto/src/gloria/js/components/dropdown.js +516 -0
- package/themes/umberto/src/gloria/js/components/expandable.js +79 -0
- package/themes/umberto/src/gloria/js/components/fake-devtools.js +722 -0
- package/themes/umberto/src/gloria/js/components/hash-link.js +60 -0
- package/themes/umberto/src/gloria/js/components/heading-link.js +135 -0
- package/themes/umberto/src/gloria/js/components/iframe.js +158 -0
- package/themes/umberto/src/gloria/js/{_imageModal.js → components/image-zoom.js} +1 -1
- package/themes/umberto/src/gloria/js/components/mobile-overlay.js +315 -0
- package/themes/umberto/src/gloria/js/components/nav-tree.js +164 -0
- package/themes/umberto/src/gloria/js/components/tabs.js +284 -0
- package/themes/umberto/src/gloria/js/components/tooltip-popover.js +576 -0
- package/themes/umberto/src/gloria/js/helpers/after-dom-ready.js +16 -0
- package/themes/umberto/src/gloria/js/helpers/animate-element.js +78 -0
- package/themes/umberto/src/gloria/js/helpers/body-scroll.js +22 -0
- package/themes/umberto/src/gloria/js/helpers/clamp.js +16 -0
- package/themes/umberto/src/gloria/js/helpers/classnames.js +64 -0
- package/themes/umberto/src/gloria/js/helpers/copy-to-clipboard.js +19 -0
- package/themes/umberto/src/gloria/js/helpers/create-anchor-positioning-watcher.js +46 -0
- package/themes/umberto/src/gloria/js/helpers/create-cleanup-registry.js +88 -0
- package/themes/umberto/src/gloria/js/helpers/create-hover-manager.js +93 -0
- package/themes/umberto/src/gloria/js/helpers/create-keyboard-blur-watcher.js +90 -0
- package/themes/umberto/src/gloria/js/helpers/create-keyboard-focus-cycler.js +251 -0
- package/themes/umberto/src/gloria/js/helpers/create-mutation-observer.js +49 -0
- package/themes/umberto/src/gloria/js/helpers/create-outside-click-watcher.js +39 -0
- package/themes/umberto/src/gloria/js/helpers/cubic-bezier.js +55 -0
- package/themes/umberto/src/gloria/js/helpers/date-time.js +21 -0
- package/themes/umberto/src/gloria/js/helpers/decode-html-entities.js +23 -0
- package/themes/umberto/src/gloria/js/helpers/escape-handler.js +59 -0
- package/themes/umberto/src/gloria/js/helpers/fetch-stylesheet.js +25 -0
- package/themes/umberto/src/gloria/js/helpers/find-code-lang.js +85 -0
- package/themes/umberto/src/gloria/js/helpers/focus-first-interactive.js +50 -0
- package/themes/umberto/src/gloria/js/helpers/format-html.js +181 -0
- package/themes/umberto/src/gloria/js/helpers/get-all-scrollable-parents.js +34 -0
- package/themes/umberto/src/gloria/js/helpers/get-parents-until.js +26 -0
- package/themes/umberto/src/gloria/js/helpers/highlight-code.js +18 -0
- package/themes/umberto/src/gloria/js/helpers/html-builder.js +69 -0
- package/themes/umberto/src/gloria/js/helpers/identity.js +8 -0
- package/themes/umberto/src/gloria/js/helpers/inject-resource-preload.js +51 -0
- package/themes/umberto/src/gloria/js/helpers/inject-script.js +79 -0
- package/themes/umberto/src/gloria/js/helpers/inject-stylesheet.js +108 -0
- package/themes/umberto/src/gloria/js/helpers/is-element-attached.js +28 -0
- package/themes/umberto/src/gloria/js/helpers/is-focusable.js +14 -0
- package/themes/umberto/src/gloria/js/helpers/is-hidden-element.js +8 -0
- package/themes/umberto/src/gloria/js/helpers/is-mobile.js +8 -0
- package/themes/umberto/src/gloria/js/helpers/is-unsafe-key.js +14 -0
- package/themes/umberto/src/gloria/js/helpers/lerp.js +27 -0
- package/themes/umberto/src/gloria/js/helpers/local-storage-helper.js +133 -0
- package/themes/umberto/src/gloria/js/helpers/pipe.js +8 -0
- package/themes/umberto/src/gloria/js/helpers/prefers-reduced-motion.js +13 -0
- package/themes/umberto/src/gloria/js/helpers/random-id.js +51 -0
- package/themes/umberto/src/gloria/js/helpers/sanitize-text.js +27 -0
- package/themes/umberto/src/gloria/js/helpers/scroll-to-hash.js +31 -0
- package/themes/umberto/src/gloria/js/helpers/take-last.js +19 -0
- package/themes/umberto/src/gloria/js/helpers/tap.js +11 -0
- package/themes/umberto/src/gloria/js/helpers/throttle.js +46 -0
- package/themes/umberto/src/gloria/js/helpers/timeout.js +14 -0
- package/themes/umberto/src/gloria/js/helpers/toggle-height.js +46 -0
- package/themes/umberto/src/gloria/js/helpers/tween.js +100 -0
- package/themes/umberto/src/gloria/js/helpers/wrap-around.js +39 -0
- package/themes/umberto/src/gloria/js/modules/algolia-search.js +168 -0
- package/themes/umberto/src/gloria/js/modules/api-filter.js +189 -0
- package/themes/umberto/src/gloria/js/modules/header-bar.js +154 -0
- package/themes/umberto/src/gloria/js/modules/header.js +242 -0
- package/themes/umberto/src/gloria/js/modules/links-prefetch.js +196 -0
- package/themes/umberto/src/gloria/js/modules/mobile-nav.js +327 -0
- package/themes/umberto/src/gloria/js/modules/sidebar.js +114 -0
- package/themes/umberto/src/gloria/js/modules/table-of-contents-api.js +214 -0
- package/themes/umberto/src/gloria/js/modules/table-of-contents.js +287 -0
- package/themes/umberto/src/gloria/js/public-api.js +75 -0
- package/themes/umberto/src/gloria/js/web-components/svg-icon.js +117 -0
- package/themes/umberto/src/umberto/js/_codeswitcherbuttons.js +1 -1
- package/themes/umberto/layout/gloria/_api-docs/_mixin/_api-title.pug +0 -17
- package/themes/umberto/layout/gloria/_mixin/nav-tree-item.pug +0 -13
- package/themes/umberto/layout/gloria/_mixin/nav-tree-level.pug +0 -38
- package/themes/umberto/layout/gloria/_partial/docsearch.pug +0 -21
- package/themes/umberto/layout/gloria/_partial/dropdown.pug +0 -12
- package/themes/umberto/layout/gloria/_partial/feedback-widget.pug +0 -20
- package/themes/umberto/layout/gloria/_partial/footer.pug +0 -6
- package/themes/umberto/layout/gloria/_partial/gh-contribute.pug +0 -8
- package/themes/umberto/layout/gloria/_partial/google-tag-manager.pug +0 -18
- package/themes/umberto/layout/gloria/_partial/header.pug +0 -64
- package/themes/umberto/layout/gloria/_partial/nav-tree.pug +0 -9
- package/themes/umberto/layout/gloria/_partial/report-issue-widget.pug +0 -26
- package/themes/umberto/layout/gloria/_partial/rwd-breadcrumbs.pug +0 -13
- package/themes/umberto/layout/gloria/_partial/search-box.pug +0 -6
- package/themes/umberto/layout/gloria/_partial/vwo.pug +0 -11
- package/themes/umberto/source/gloria/assets/_img/arrows.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/book.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/box-brown.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/box-orange.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/box-red.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/bulb.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/clipboard.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/cog.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/data.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/documentation.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/download.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/edit.svg +0 -2
- package/themes/umberto/source/gloria/assets/_img/exclamation-circle.svg +0 -2
- package/themes/umberto/source/gloria/assets/_img/eye.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/filter.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/filtering.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/folder.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/github.svg +0 -6
- package/themes/umberto/source/gloria/assets/_img/header-info-configs.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/header-info-events.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/header-info-methods.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/header-info-properties.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/heart.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/info-circle.svg +0 -4
- package/themes/umberto/source/gloria/assets/_img/info.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/list-nest.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/loupe.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/menu.svg +0 -4
- package/themes/umberto/source/gloria/assets/_img/plug.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/star-in-circle.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/tick.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/triangle-down.svg +0 -1
- package/themes/umberto/source/gloria/assets/_img/triangle-right.svg +0 -1
- package/themes/umberto/src/gloria/css/_api-content.scss +0 -32
- package/themes/umberto/src/gloria/css/_api-info-box.scss +0 -86
- package/themes/umberto/src/gloria/css/_api-props-filter.scss +0 -106
- package/themes/umberto/src/gloria/css/_api-see-source.scss +0 -35
- package/themes/umberto/src/gloria/css/_api-subheader.scss +0 -167
- package/themes/umberto/src/gloria/css/_api-tree.scss +0 -121
- package/themes/umberto/src/gloria/css/_badge.scss +0 -74
- package/themes/umberto/src/gloria/css/_code-switcher.scss +0 -61
- package/themes/umberto/src/gloria/css/_collapsinglist.scss +0 -262
- package/themes/umberto/src/gloria/css/_content.scss +0 -236
- package/themes/umberto/src/gloria/css/_docsearch.scss +0 -109
- package/themes/umberto/src/gloria/css/_dropdown.scss +0 -63
- package/themes/umberto/src/gloria/css/_editor-icon.scss +0 -26
- package/themes/umberto/src/gloria/css/_feedback-widget.scss +0 -11
- package/themes/umberto/src/gloria/css/_font-external.scss +0 -8
- package/themes/umberto/src/gloria/css/_footer.scss +0 -40
- package/themes/umberto/src/gloria/css/_formatted.scss +0 -285
- package/themes/umberto/src/gloria/css/_guide-content.scss +0 -37
- package/themes/umberto/src/gloria/css/_guide-sdk-tree.scss +0 -14
- package/themes/umberto/src/gloria/css/_loading-spinner.scss +0 -33
- package/themes/umberto/src/gloria/css/_main.scss +0 -59
- package/themes/umberto/src/gloria/css/_navigation.scss +0 -35
- package/themes/umberto/src/gloria/css/_notice.scss +0 -116
- package/themes/umberto/src/gloria/css/_print.scss +0 -20
- package/themes/umberto/src/gloria/css/_prism.scss +0 -223
- package/themes/umberto/src/gloria/css/_rwd-breadcrumbs.scss +0 -28
- package/themes/umberto/src/gloria/css/_rwd-menu.scss +0 -89
- package/themes/umberto/src/gloria/css/_secondary-navigation.scss +0 -152
- package/themes/umberto/src/gloria/css/_theme-dark.scss +0 -175
- package/themes/umberto/src/gloria/css/_toggler.scss +0 -46
- package/themes/umberto/src/gloria/css/_top.scss +0 -350
- package/themes/umberto/src/gloria/css/_tree.scss +0 -218
- package/themes/umberto/src/gloria/css/_warning-banner.scss +0 -46
- package/themes/umberto/src/gloria/css/components/_lightbox.scss +0 -12
- package/themes/umberto/src/gloria/css/helpers/_color.scss +0 -49
- package/themes/umberto/src/gloria/css/helpers/_font.scss +0 -60
- package/themes/umberto/src/gloria/css/helpers/_globals.scss +0 -129
- package/themes/umberto/src/gloria/css/helpers/_reset.scss +0 -52
- package/themes/umberto/src/gloria/css/helpers/_spacing.scss +0 -21
- package/themes/umberto/src/gloria/css/pages/_sdk.scss +0 -111
- package/themes/umberto/src/gloria/js/_anchors.js +0 -57
- package/themes/umberto/src/gloria/js/_apisearch.js +0 -126
- package/themes/umberto/src/gloria/js/_apitree.js +0 -67
- package/themes/umberto/src/gloria/js/_attachpermalinklistener.js +0 -50
- package/themes/umberto/src/gloria/js/_codeswitcherbuttons.js +0 -146
- package/themes/umberto/src/gloria/js/_collapsables.js +0 -135
- package/themes/umberto/src/gloria/js/_copymobileapinavigation.js +0 -26
- package/themes/umberto/src/gloria/js/_devnames.js +0 -37
- package/themes/umberto/src/gloria/js/_dropdowns.js +0 -55
- package/themes/umberto/src/gloria/js/_filtering.js +0 -139
- package/themes/umberto/src/gloria/js/_pagenavigation.js +0 -93
- package/themes/umberto/src/gloria/js/_prism.js +0 -104
- package/themes/umberto/src/gloria/js/_rwdmenu.js +0 -15
- package/themes/umberto/src/gloria/js/_samplecode.js +0 -23
- package/themes/umberto/src/gloria/js/_sidenavigation.js +0 -59
- package/themes/umberto/src/gloria/js/_toc.js +0 -93
- package/themes/umberto/src/gloria/js/_tooltips.js +0 -39
- package/themes/umberto/src/gloria/js/_warningbanner.js +0 -18
- package/themes/umberto/src/gloria/js/vendor/prism.js +0 -45
- /package/themes/umberto/layout/gloria/_api-docs/_partial/{api-info-box.pug → api-hierarchy.pug} +0 -0
- /package/themes/umberto/layout/gloria/{_partial → _trackers}/google-analytics.pug +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Watches for clicks outside of specified elements and triggers a callback when they occur.
|
|
8
|
+
*
|
|
9
|
+
* @param config - Configuration object.
|
|
10
|
+
* @param config.elements - Elements to monitor.
|
|
11
|
+
* @param config.callback - Function to call when click outside occurs.
|
|
12
|
+
* @returns Cleanup function to remove the listener.
|
|
13
|
+
*/
|
|
14
|
+
export function createOutsideClickWatcher( { elements, callback } ) {
|
|
15
|
+
// Convert single element to array for consistent handling.
|
|
16
|
+
if ( !Array.isArray( elements ) ) {
|
|
17
|
+
elements = [ elements ];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Handler function for click event.
|
|
21
|
+
const handleClick = event => {
|
|
22
|
+
// Check if click was outside all monitored elements.
|
|
23
|
+
const isOutside = !elements.some( element =>
|
|
24
|
+
element === event.target || element.contains( event.target )
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
if ( isOutside ) {
|
|
28
|
+
callback( event );
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// Attach the event listener.
|
|
33
|
+
document.addEventListener( 'click', handleClick );
|
|
34
|
+
|
|
35
|
+
// Return cleanup function.
|
|
36
|
+
return () => {
|
|
37
|
+
document.removeEventListener( 'click', handleClick );
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates a cubic bezier easing function with the given control points.
|
|
8
|
+
*
|
|
9
|
+
* @param x1 - First control point X coordinate (0-1)
|
|
10
|
+
* @param y1 - First control point Y coordinate (0-1)
|
|
11
|
+
* @param x2 - Second control point X coordinate (0-1)
|
|
12
|
+
* @param y2 - Second control point Y coordinate (0-1)
|
|
13
|
+
* @returns A function that takes a value t (0-1) and returns the interpolated value
|
|
14
|
+
*/
|
|
15
|
+
export function createCubicBezier( x1, y1, x2, y2 ) {
|
|
16
|
+
return function( t ) {
|
|
17
|
+
// Implementation of cubic bezier calculation
|
|
18
|
+
const cx = 3 * x1;
|
|
19
|
+
const bx = 3 * ( x2 - x1 ) - cx;
|
|
20
|
+
const ax = 1 - cx - bx;
|
|
21
|
+
|
|
22
|
+
const cy = 3 * y1;
|
|
23
|
+
const by = 3 * ( y2 - y1 ) - cy;
|
|
24
|
+
const ay = 1 - cy - by;
|
|
25
|
+
|
|
26
|
+
const sampleCurveX = t => ( ( ax * t + bx ) * t + cx ) * t;
|
|
27
|
+
const sampleCurveY = t => ( ( ay * t + by ) * t + cy ) * t;
|
|
28
|
+
|
|
29
|
+
let t2 = t;
|
|
30
|
+
|
|
31
|
+
// Newton-Raphson iteration to solve for t given x
|
|
32
|
+
for ( let i = 0; i < 8; i++ ) {
|
|
33
|
+
const x = sampleCurveX( t2 ) - t;
|
|
34
|
+
if ( Math.abs( x ) < 0.001 ) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const d = ( 3 * ax * t2 + 2 * bx ) * t2 + cx;
|
|
39
|
+
if ( Math.abs( d ) < 0.0001 ) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
t2 = t2 - x / d;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return sampleCurveY( t2 );
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Common easing functions derived from CSS `cubic-bezier()` timing functions.
|
|
52
|
+
*/
|
|
53
|
+
export const easings = {
|
|
54
|
+
cubicOut: createCubicBezier( 0.215, 0.61, 0.355, 1 )
|
|
55
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const Hours = {
|
|
7
|
+
to: {
|
|
8
|
+
milliseconds: num => num * 3600000
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const Days = {
|
|
13
|
+
to: {
|
|
14
|
+
milliseconds: num => num * 86400000
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const Weeks = {
|
|
18
|
+
to: {
|
|
19
|
+
milliseconds: num => num * 604800000
|
|
20
|
+
}
|
|
21
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Decodes common HTML entities in a string.
|
|
8
|
+
*
|
|
9
|
+
* @param text - Text that may contain HTML entities
|
|
10
|
+
* @returns Text with HTML entities replaced with their corresponding characters
|
|
11
|
+
*/
|
|
12
|
+
export function decodeHtmlEntities( text ) {
|
|
13
|
+
return text
|
|
14
|
+
.replace( / /g, ' ' )
|
|
15
|
+
.replace( /&/g, '&' )
|
|
16
|
+
.replace( /</g, '<' )
|
|
17
|
+
.replace( />/g, '>' )
|
|
18
|
+
.replace( /"/g, '"' )
|
|
19
|
+
.replace( /'/g, '\'' )
|
|
20
|
+
.replace( /—/g, '—' )
|
|
21
|
+
.replace( /–/g, '–' )
|
|
22
|
+
.replace( /…/g, '…' );
|
|
23
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const ON_ESCAPE_CALLBACK_STACK = new Set();
|
|
7
|
+
let globalEscapeHandler = null;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Executes a callback when the Escape key is pressed.
|
|
11
|
+
*
|
|
12
|
+
* This function follows the UI layering pattern where pressing Escape
|
|
13
|
+
* only closes the topmost layer (like modals, dropdowns, or overlays).
|
|
14
|
+
* The most recently added callback is considered to be associated with
|
|
15
|
+
* the topmost UI layer and will be the only one executed.
|
|
16
|
+
*
|
|
17
|
+
* @param callback - The function to execute on Escape key press when it's the most recent addition.
|
|
18
|
+
* @returns A function that removes the event listener when called.
|
|
19
|
+
*/
|
|
20
|
+
export function onEscapeKeyPress( callback ) {
|
|
21
|
+
if ( typeof callback !== 'function' ) {
|
|
22
|
+
throw new Error( 'Callback must be a function' );
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Global escape key handler (defined once)
|
|
26
|
+
if ( !globalEscapeHandler ) {
|
|
27
|
+
globalEscapeHandler = event => {
|
|
28
|
+
if ( event.key === 'Escape' || event.keyCode === 27 ) {
|
|
29
|
+
// Get the latest callback from the stack (if any)
|
|
30
|
+
const latestCallback = Array.from( ON_ESCAPE_CALLBACK_STACK ).pop();
|
|
31
|
+
|
|
32
|
+
if ( latestCallback ) {
|
|
33
|
+
latestCallback();
|
|
34
|
+
|
|
35
|
+
// Remove the executed callback
|
|
36
|
+
ON_ESCAPE_CALLBACK_STACK.delete( latestCallback );
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
document.addEventListener( 'keydown', globalEscapeHandler );
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Add the callback to the stack
|
|
45
|
+
ON_ESCAPE_CALLBACK_STACK.add( callback );
|
|
46
|
+
|
|
47
|
+
function unmount() {
|
|
48
|
+
ON_ESCAPE_CALLBACK_STACK.delete( callback );
|
|
49
|
+
|
|
50
|
+
// If stack is empty, remove the global handler
|
|
51
|
+
if ( ON_ESCAPE_CALLBACK_STACK.size === 0 && globalEscapeHandler ) {
|
|
52
|
+
document.removeEventListener( 'keydown', globalEscapeHandler );
|
|
53
|
+
globalEscapeHandler = null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Return a function to remove the callback if needed
|
|
58
|
+
return unmount;
|
|
59
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Fetches a stylesheet from the given URL and returns its content.
|
|
8
|
+
*
|
|
9
|
+
* @param url The URL of the stylesheet to fetch.
|
|
10
|
+
* @returns A promise that resolves with the stylesheet content.
|
|
11
|
+
*/
|
|
12
|
+
export async function fetchStylesheet( url ) {
|
|
13
|
+
try {
|
|
14
|
+
const response = await fetch( url );
|
|
15
|
+
|
|
16
|
+
if ( !response.ok ) {
|
|
17
|
+
throw new Error( `Failed to fetch stylesheet: ${ response.status } ${ response.statusText }` );
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return await response.text();
|
|
21
|
+
} catch ( error ) {
|
|
22
|
+
console.error( `Error fetching stylesheet from ${ url }:`, error );
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const PROGRAMMING_LANGUAGES = [
|
|
7
|
+
'angular-html',
|
|
8
|
+
'angular-ts',
|
|
9
|
+
'astro',
|
|
10
|
+
'bash',
|
|
11
|
+
'blade',
|
|
12
|
+
'c',
|
|
13
|
+
'coffee',
|
|
14
|
+
'coffeescript',
|
|
15
|
+
'cpp',
|
|
16
|
+
'c++',
|
|
17
|
+
'css',
|
|
18
|
+
'diff',
|
|
19
|
+
'glsl',
|
|
20
|
+
'graphql',
|
|
21
|
+
'gql',
|
|
22
|
+
'haml',
|
|
23
|
+
'handlebars',
|
|
24
|
+
'hbs',
|
|
25
|
+
'html',
|
|
26
|
+
'html-derivative',
|
|
27
|
+
'http',
|
|
28
|
+
'imba',
|
|
29
|
+
'jade',
|
|
30
|
+
'java',
|
|
31
|
+
'javascript',
|
|
32
|
+
'jinja',
|
|
33
|
+
'jison',
|
|
34
|
+
'jl',
|
|
35
|
+
'js',
|
|
36
|
+
'json',
|
|
37
|
+
'json5',
|
|
38
|
+
'jsonc',
|
|
39
|
+
'jsonl',
|
|
40
|
+
'jsx',
|
|
41
|
+
'julia',
|
|
42
|
+
'less',
|
|
43
|
+
'lit',
|
|
44
|
+
'markdown',
|
|
45
|
+
'marko',
|
|
46
|
+
'md',
|
|
47
|
+
'mdc',
|
|
48
|
+
'mdx',
|
|
49
|
+
'php',
|
|
50
|
+
'plain',
|
|
51
|
+
'postcss',
|
|
52
|
+
'py',
|
|
53
|
+
'python',
|
|
54
|
+
'pug',
|
|
55
|
+
'r',
|
|
56
|
+
'regex',
|
|
57
|
+
'regexp',
|
|
58
|
+
'sass',
|
|
59
|
+
'scss',
|
|
60
|
+
'sh',
|
|
61
|
+
'shell',
|
|
62
|
+
'shellscript',
|
|
63
|
+
'sql',
|
|
64
|
+
'styl',
|
|
65
|
+
'stylus',
|
|
66
|
+
'svelte',
|
|
67
|
+
'text',
|
|
68
|
+
'ts',
|
|
69
|
+
'ts-tags',
|
|
70
|
+
'tsx',
|
|
71
|
+
'typescript',
|
|
72
|
+
'vue',
|
|
73
|
+
'vue-html',
|
|
74
|
+
'wasm',
|
|
75
|
+
'wgsl',
|
|
76
|
+
'wit',
|
|
77
|
+
'xml',
|
|
78
|
+
'yaml',
|
|
79
|
+
'yml',
|
|
80
|
+
'zsh'
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
export function findCodeLang( codeElement ) {
|
|
84
|
+
return Array.from( codeElement.classList ).find( className => PROGRAMMING_LANGUAGES.includes( className ) );
|
|
85
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { isFocusable } from './is-focusable';
|
|
7
|
+
import { timeout } from './timeout';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Focuses the first interactive/focusable element within a container.
|
|
11
|
+
* If the container itself is focusable, it will be focused.
|
|
12
|
+
* Otherwise, the first focusable child element will be focused.
|
|
13
|
+
*
|
|
14
|
+
* @param container - The DOM element to search within
|
|
15
|
+
* @param [options] - Configuration options
|
|
16
|
+
* @param [options.includeContainer=true] - Whether to include the container element itself as a focus candidate
|
|
17
|
+
* @param [options.selector='a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])'] - Selector for focusable elements
|
|
18
|
+
* @returns The element that was focused, or null if no focusable element was found
|
|
19
|
+
*/
|
|
20
|
+
export async function focusFirstInteractive( container, options = {} ) {
|
|
21
|
+
const {
|
|
22
|
+
includeContainer = true,
|
|
23
|
+
selector = 'a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
24
|
+
} = options;
|
|
25
|
+
|
|
26
|
+
// Find the first focusable element in the container
|
|
27
|
+
const focusableElements = container.querySelectorAll( selector );
|
|
28
|
+
|
|
29
|
+
if ( focusableElements.length > 0 ) {
|
|
30
|
+
return focusAndWait( focusableElements[ 0 ] );
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Check if the container itself is focusable
|
|
34
|
+
if ( includeContainer && isFocusable( container ) ) {
|
|
35
|
+
return focusAndWait( container );
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Let's wait short period of the time to make the browser apply focus.
|
|
43
|
+
*/
|
|
44
|
+
async function focusAndWait( element ) {
|
|
45
|
+
element.focus();
|
|
46
|
+
|
|
47
|
+
await timeout( 20 );
|
|
48
|
+
|
|
49
|
+
return element;
|
|
50
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Formats the HTML output for better readability.
|
|
8
|
+
*/
|
|
9
|
+
export function formatHtml( input ) {
|
|
10
|
+
// Decode HTML entities before formatting.
|
|
11
|
+
input = decodeHtmlEntities( input );
|
|
12
|
+
|
|
13
|
+
// A list of block-like elements around which the new lines should be inserted, and within which
|
|
14
|
+
// the indentation of their children should be increased.
|
|
15
|
+
// The list is partially based on https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements that contains
|
|
16
|
+
// a full list of HTML block-level elements.
|
|
17
|
+
// A void element is an element that cannot have any child - https://html.spec.whatwg.org/multipage/syntax.html#void-elements.
|
|
18
|
+
// Note that <pre> element is not listed on this list to avoid breaking whitespace formatting.
|
|
19
|
+
// Note that <br> element is not listed and handled separately so no additional white spaces are injected.
|
|
20
|
+
const elementsToFormat = [
|
|
21
|
+
{ name: 'address', isVoid: false },
|
|
22
|
+
{ name: 'article', isVoid: false },
|
|
23
|
+
{ name: 'aside', isVoid: false },
|
|
24
|
+
{ name: 'blockquote', isVoid: false },
|
|
25
|
+
{ name: 'details', isVoid: false },
|
|
26
|
+
{ name: 'dialog', isVoid: false },
|
|
27
|
+
{ name: 'dd', isVoid: false },
|
|
28
|
+
{ name: 'div', isVoid: false },
|
|
29
|
+
{ name: 'dl', isVoid: false },
|
|
30
|
+
{ name: 'dt', isVoid: false },
|
|
31
|
+
{ name: 'fieldset', isVoid: false },
|
|
32
|
+
{ name: 'figcaption', isVoid: false },
|
|
33
|
+
{ name: 'figure', isVoid: false },
|
|
34
|
+
{ name: 'footer', isVoid: false },
|
|
35
|
+
{ name: 'form', isVoid: false },
|
|
36
|
+
{ name: 'h1', isVoid: false },
|
|
37
|
+
{ name: 'h2', isVoid: false },
|
|
38
|
+
{ name: 'h3', isVoid: false },
|
|
39
|
+
{ name: 'h4', isVoid: false },
|
|
40
|
+
{ name: 'h5', isVoid: false },
|
|
41
|
+
{ name: 'h6', isVoid: false },
|
|
42
|
+
{ name: 'header', isVoid: false },
|
|
43
|
+
{ name: 'hgroup', isVoid: false },
|
|
44
|
+
{ name: 'hr', isVoid: true },
|
|
45
|
+
{ name: 'li', isVoid: false },
|
|
46
|
+
{ name: 'main', isVoid: false },
|
|
47
|
+
{ name: 'nav', isVoid: false },
|
|
48
|
+
{ name: 'ol', isVoid: false },
|
|
49
|
+
{ name: 'p', isVoid: false },
|
|
50
|
+
{ name: 'section', isVoid: false },
|
|
51
|
+
{ name: 'table', isVoid: false },
|
|
52
|
+
{ name: 'tbody', isVoid: false },
|
|
53
|
+
{ name: 'td', isVoid: false },
|
|
54
|
+
{ name: 'th', isVoid: false },
|
|
55
|
+
{ name: 'thead', isVoid: false },
|
|
56
|
+
{ name: 'tr', isVoid: false },
|
|
57
|
+
{ name: 'ul', isVoid: false }
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
const elementNamesToFormat = elementsToFormat.map( element => element.name ).join( '|' );
|
|
61
|
+
|
|
62
|
+
// It is not the fastest way to format the HTML markup but the performance should be good enough.
|
|
63
|
+
const lines = input
|
|
64
|
+
// Add new line before and after `<tag>` and `</tag>`.
|
|
65
|
+
// It may separate individual elements with two new lines, but this will be fixed below.
|
|
66
|
+
.replace( new RegExp( `</?(${ elementNamesToFormat })( .*?)?>`, 'g' ), '\n$&\n' )
|
|
67
|
+
// Keep `<br>`s at the end of line to avoid adding additional whitespaces before `<br>`.
|
|
68
|
+
.replace( /<br[^>]*>/g, '$&\n' )
|
|
69
|
+
// Divide input string into lines, which start with either an opening tag, a closing tag, or just a text.
|
|
70
|
+
.split( '\n' );
|
|
71
|
+
|
|
72
|
+
let indentCount = 0;
|
|
73
|
+
let isPreformattedLine = false;
|
|
74
|
+
|
|
75
|
+
return lines
|
|
76
|
+
.filter( line => line.length )
|
|
77
|
+
.map( line => {
|
|
78
|
+
isPreformattedLine = isPreformattedBlockLine( line, isPreformattedLine );
|
|
79
|
+
|
|
80
|
+
if ( isNonVoidOpeningTag( line, elementsToFormat ) ) {
|
|
81
|
+
return indentLine( line, indentCount++ );
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if ( isClosingTag( line, elementsToFormat ) ) {
|
|
85
|
+
return indentLine( line, --indentCount );
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if ( isPreformattedLine === 'middle' || isPreformattedLine === 'last' ) {
|
|
89
|
+
return line;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return indentLine( line, indentCount );
|
|
93
|
+
} )
|
|
94
|
+
.join( '\n' );
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Decodes HTML entities to their character representations.
|
|
99
|
+
*
|
|
100
|
+
* @param html HTML string with entities.
|
|
101
|
+
* @returns HTML string with decoded entities.
|
|
102
|
+
*/
|
|
103
|
+
function decodeHtmlEntities( html ) {
|
|
104
|
+
const entities = {
|
|
105
|
+
'"': '\'',
|
|
106
|
+
'&': '&',
|
|
107
|
+
'<': '<',
|
|
108
|
+
'>': '>',
|
|
109
|
+
' ': ' ',
|
|
110
|
+
''': '\'',
|
|
111
|
+
''': '\'',
|
|
112
|
+
'/': '/',
|
|
113
|
+
''': '\'',
|
|
114
|
+
'`': '`'
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
return html.replace( /"|&|<|>| |'|'|/|'|`/g,
|
|
118
|
+
match => entities[ match ] );
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Checks, if an argument is an opening tag of a non-void element to be formatted.
|
|
123
|
+
*
|
|
124
|
+
* @param line String to check.
|
|
125
|
+
* @param elementsToFormat Elements to be formatted.
|
|
126
|
+
*/
|
|
127
|
+
function isNonVoidOpeningTag( line, elementsToFormat ) {
|
|
128
|
+
return elementsToFormat.some( element => {
|
|
129
|
+
if ( element.isVoid ) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if ( !new RegExp( `<${ element.name }( .*?)?>` ).test( line ) ) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return true;
|
|
138
|
+
} );
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Checks, if an argument is a closing tag.
|
|
143
|
+
*
|
|
144
|
+
* @param line String to check.
|
|
145
|
+
* @param elementsToFormat Elements to be formatted.
|
|
146
|
+
*/
|
|
147
|
+
function isClosingTag( line, elementsToFormat ) {
|
|
148
|
+
return elementsToFormat.some( element => {
|
|
149
|
+
return new RegExp( `</${ element.name }>` ).test( line );
|
|
150
|
+
} );
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Indents a line by a specified number of characters.
|
|
155
|
+
*
|
|
156
|
+
* @param line Line to indent.
|
|
157
|
+
* @param indentCount Number of characters to use for indentation.
|
|
158
|
+
* @param indentChar Indentation character(s). 4 spaces by default.
|
|
159
|
+
*/
|
|
160
|
+
function indentLine( line, indentCount, indentChar = ' ' ) {
|
|
161
|
+
// More about Math.max() here in https://github.com/ckeditor/ckeditor5/issues/10698.
|
|
162
|
+
return `${ indentChar.repeat( Math.max( 0, indentCount ) ) }${ line }`;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Checks whether a line belongs to a preformatted (`<pre>`) block.
|
|
167
|
+
*
|
|
168
|
+
* @param line Line to check.
|
|
169
|
+
* @param isPreviousLinePreFormatted Information on whether the previous line was preformatted (and how).
|
|
170
|
+
*/
|
|
171
|
+
function isPreformattedBlockLine( line, isPreviousLinePreFormatted ) {
|
|
172
|
+
if ( new RegExp( '<pre( .*?)?>' ).test( line ) ) {
|
|
173
|
+
return 'first';
|
|
174
|
+
} else if ( new RegExp( '</pre>' ).test( line ) ) {
|
|
175
|
+
return 'last';
|
|
176
|
+
} else if ( isPreviousLinePreFormatted === 'first' || isPreviousLinePreFormatted === 'middle' ) {
|
|
177
|
+
return 'middle';
|
|
178
|
+
} else {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Checks if an element is scrollable.
|
|
8
|
+
*/
|
|
9
|
+
export function getAllScrollableParents( element, includeWindow = false ) {
|
|
10
|
+
const scrollableParents = [];
|
|
11
|
+
|
|
12
|
+
while ( element && element !== document.body ) {
|
|
13
|
+
if ( isElementScrollable( element ) ) {
|
|
14
|
+
scrollableParents.push( element );
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
element = element.parentNode;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if ( includeWindow ) {
|
|
21
|
+
scrollableParents.push( window );
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return scrollableParents;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Checks if an element is scrollable.
|
|
29
|
+
*/
|
|
30
|
+
export function isElementScrollable( element ) {
|
|
31
|
+
const overflowY = window.getComputedStyle( element ).overflowY;
|
|
32
|
+
|
|
33
|
+
return overflowY === 'auto' || overflowY === 'scroll';
|
|
34
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Get all ancestors of an element until the first match of a given selector.
|
|
8
|
+
*
|
|
9
|
+
* @param el - The DOM element.
|
|
10
|
+
* @param selector - A CSS selector to stop at. If the element matches this selector, it will not be included in the result.
|
|
11
|
+
* @returns {HTMLElement[]} An array of ancestor elements, until the first match of the selector.
|
|
12
|
+
*/
|
|
13
|
+
export const getParentsUntil = ( el, selector ) => {
|
|
14
|
+
const parents = [];
|
|
15
|
+
let _el = el.parentNode;
|
|
16
|
+
|
|
17
|
+
while ( _el && typeof _el.matches === 'function' ) {
|
|
18
|
+
parents.unshift( _el );
|
|
19
|
+
if ( _el.matches( selector ) ) {
|
|
20
|
+
return parents;
|
|
21
|
+
} else {
|
|
22
|
+
_el = _el.parentNode;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { codeToHtml } from 'shiki';
|
|
7
|
+
|
|
8
|
+
export async function highlightCode( codeString, lang ) {
|
|
9
|
+
const highlightedHTML = await codeToHtml( codeString.trim(), {
|
|
10
|
+
lang,
|
|
11
|
+
theme: 'github-light'
|
|
12
|
+
} );
|
|
13
|
+
|
|
14
|
+
const highlightedHTMLWithTabsInsteadOfSpaces = highlightedHTML.replaceAll( / {4}/g, ' ' );
|
|
15
|
+
const highlightedHTMLWithClasses = highlightedHTMLWithTabsInsteadOfSpaces.replaceAll( 'shiki', `shiki ${ lang }` );
|
|
16
|
+
|
|
17
|
+
return highlightedHTMLWithClasses;
|
|
18
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2017-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates a proxy handler for HTML element creation with a fluent API.
|
|
8
|
+
*/
|
|
9
|
+
function createHtmlBuilder() {
|
|
10
|
+
const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
|
|
11
|
+
const SVG_ELEMENTS = [ 'svg', 'use', 'title', 'path', 'rect', 'circle', 'g', 'polygon' ];
|
|
12
|
+
|
|
13
|
+
const handler = {
|
|
14
|
+
get( _, tag ) {
|
|
15
|
+
return ( attributes = {}, ...children ) => {
|
|
16
|
+
if ( children ) {
|
|
17
|
+
children = children.flat().filter( Boolean );
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// If the first argument is a string or DOM element, treat it as a child
|
|
21
|
+
if ( typeof attributes === 'string' || attributes instanceof Node ) {
|
|
22
|
+
children.unshift( attributes );
|
|
23
|
+
attributes = {};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Create the element - use SVG namespace for SVG elements
|
|
27
|
+
const isSvgElement = SVG_ELEMENTS.includes( tag );
|
|
28
|
+
const element = isSvgElement ?
|
|
29
|
+
document.createElementNS( SVG_NAMESPACE, tag ) :
|
|
30
|
+
document.createElement( tag );
|
|
31
|
+
|
|
32
|
+
// Set attributes
|
|
33
|
+
for ( const [ key, value ] of Object.entries( attributes ) ) {
|
|
34
|
+
if ( value === true ) {
|
|
35
|
+
element.setAttribute( key, '' );
|
|
36
|
+
} else if ( value !== false && value !== null && value !== undefined ) {
|
|
37
|
+
element.setAttribute( key, value );
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Add children
|
|
42
|
+
for ( const child of children ) {
|
|
43
|
+
if ( child !== null && child !== undefined ) {
|
|
44
|
+
if ( typeof child === 'string' ) {
|
|
45
|
+
element.appendChild( document.createTextNode( child ) );
|
|
46
|
+
} else if ( child instanceof Node ) {
|
|
47
|
+
element.appendChild( child );
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return element;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return new Proxy( {}, handler );
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* A proxy for creating HTML elements with a fluent API.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* // Create a div with class 'container' and id 'main'
|
|
65
|
+
* const div = html.div({ class: 'container', id: 'main' },
|
|
66
|
+
* html.span('Hello World')
|
|
67
|
+
* );
|
|
68
|
+
*/
|
|
69
|
+
export const html = createHtmlBuilder();
|