Repository: hakimel/reveal.js
Branch: master
Commit: ea3d7aaff513
Files: 216
Total size: 6.1 MB
Directory structure:
gitextract_hvnf3hrt/
├── .codespellrc
├── .github/
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ └── workflows/
│ ├── spellcheck.yml
│ └── test.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── LICENSE
├── README.md
├── css/
│ ├── layout.scss
│ ├── print/
│ │ ├── paper.scss
│ │ └── pdf.scss
│ ├── reset.css
│ ├── reveal.scss
│ └── theme/
│ ├── README.md
│ ├── beige.scss
│ ├── black-contrast.scss
│ ├── black.scss
│ ├── blood.scss
│ ├── dracula.scss
│ ├── fonts/
│ │ ├── league-gothic/
│ │ │ ├── LICENSE
│ │ │ └── league-gothic.css
│ │ └── source-sans-pro/
│ │ ├── LICENSE
│ │ └── source-sans-pro.css
│ ├── league.scss
│ ├── moon.scss
│ ├── night.scss
│ ├── serif.scss
│ ├── simple.scss
│ ├── sky.scss
│ ├── solarized.scss
│ ├── template/
│ │ ├── mixins.scss
│ │ ├── settings.scss
│ │ └── theme.scss
│ ├── white-contrast.scss
│ └── white.scss
├── demo.html
├── dist/
│ ├── config.d.ts
│ ├── plugin/
│ │ ├── highlight/
│ │ │ ├── monokai.css
│ │ │ └── zenburn.css
│ │ ├── highlight.d.ts
│ │ ├── highlight.js
│ │ ├── highlight.mjs
│ │ ├── markdown.d.ts
│ │ ├── markdown.js
│ │ ├── markdown.mjs
│ │ ├── math.d.ts
│ │ ├── math.js
│ │ ├── math.mjs
│ │ ├── notes.d.ts
│ │ ├── notes.js
│ │ ├── notes.mjs
│ │ ├── search.d.ts
│ │ ├── search.js
│ │ ├── search.mjs
│ │ ├── zoom.d.ts
│ │ ├── zoom.js
│ │ └── zoom.mjs
│ ├── reset.css
│ ├── reveal.css
│ ├── reveal.d.ts
│ ├── reveal.js
│ ├── reveal.mjs
│ ├── theme/
│ │ ├── beige.css
│ │ ├── black-contrast.css
│ │ ├── black.css
│ │ ├── blood.css
│ │ ├── dracula.css
│ │ ├── league.css
│ │ ├── moon.css
│ │ ├── night.css
│ │ ├── serif.css
│ │ ├── simple.css
│ │ ├── sky.css
│ │ ├── solarized.css
│ │ ├── white-contrast.css
│ │ └── white.css
│ └── utils/
│ ├── color.d.ts
│ ├── constants.d.ts
│ ├── device.d.ts
│ ├── loader.d.ts
│ └── util.d.ts
├── examples/
│ ├── 500-slides.html
│ ├── assets/
│ │ └── beeping.txt
│ ├── auto-animate.html
│ ├── backgrounds.html
│ ├── barebones.html
│ ├── layout-helpers.html
│ ├── lightbox.html
│ ├── markdown.html
│ ├── markdown.md
│ ├── math.html
│ ├── media.html
│ ├── multiple-presentations.html
│ ├── scroll.html
│ └── transitions.html
├── index.html
├── js/
│ ├── components/
│ │ └── playback.js
│ ├── config.ts
│ ├── controllers/
│ │ ├── autoanimate.js
│ │ ├── backgrounds.js
│ │ ├── controls.js
│ │ ├── focus.js
│ │ ├── fragments.js
│ │ ├── jumptoslide.js
│ │ ├── keyboard.js
│ │ ├── location.js
│ │ ├── notes.js
│ │ ├── overlay.js
│ │ ├── overview.js
│ │ ├── plugins.js
│ │ ├── pointer.js
│ │ ├── printview.js
│ │ ├── progress.js
│ │ ├── scrollview.js
│ │ ├── slidecontent.js
│ │ ├── slidenumber.js
│ │ └── touch.js
│ ├── index.ts
│ ├── reveal.d.ts
│ ├── reveal.js
│ └── utils/
│ ├── color.ts
│ ├── constants.ts
│ ├── device.ts
│ ├── loader.ts
│ └── util.ts
├── package.json
├── plugin/
│ ├── highlight/
│ │ ├── index.ts
│ │ ├── plugin.js
│ │ └── vite.config.ts
│ ├── markdown/
│ │ ├── index.ts
│ │ ├── plugin.js
│ │ └── vite.config.ts
│ ├── math/
│ │ ├── index.ts
│ │ ├── katex.js
│ │ ├── mathjax2.js
│ │ ├── mathjax3.js
│ │ ├── mathjax4.js
│ │ ├── plugin.js
│ │ └── vite.config.ts
│ ├── notes/
│ │ ├── index.ts
│ │ ├── plugin.js
│ │ ├── speaker-view.html
│ │ └── vite.config.ts
│ ├── search/
│ │ ├── index.ts
│ │ ├── plugin.js
│ │ └── vite.config.ts
│ ├── vite-plugin-dts.ts
│ └── zoom/
│ ├── index.ts
│ ├── plugin.js
│ └── vite.config.ts
├── public/
│ └── plugin/
│ └── highlight/
│ ├── monokai.css
│ └── zenburn.css
├── react/
│ ├── AGENTS.md
│ ├── README.md
│ ├── demo/
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── public/
│ │ │ └── markdown.md
│ │ ├── src/
│ │ │ ├── demo-app.tsx
│ │ │ └── main.tsx
│ │ ├── tsconfig.json
│ │ └── vite.config.ts
│ ├── package.json
│ ├── src/
│ │ ├── __tests__/
│ │ │ └── setup.ts
│ │ ├── components/
│ │ │ ├── code.test.tsx
│ │ │ ├── code.tsx
│ │ │ ├── deck.test.tsx
│ │ │ ├── deck.tsx
│ │ │ ├── fragment.test.tsx
│ │ │ ├── fragment.tsx
│ │ │ ├── markdown.test.tsx
│ │ │ ├── markdown.tsx
│ │ │ ├── slide.test.tsx
│ │ │ ├── slide.tsx
│ │ │ ├── stack.test.tsx
│ │ │ └── stack.tsx
│ │ ├── index.ts
│ │ ├── reveal-context.ts
│ │ ├── types.ts
│ │ └── utils/
│ │ ├── markdown.ts
│ │ └── slide-attributes.ts
│ ├── tsconfig.json
│ ├── vite.config.ts
│ └── vitest.config.ts
├── scripts/
│ ├── add-banner.js
│ ├── banner.js
│ ├── build-es5.js
│ ├── test.js
│ └── zip.js
├── test/
│ ├── assets/
│ │ ├── external-script-a.js
│ │ ├── external-script-b.js
│ │ ├── external-script-c.js
│ │ └── external-script-d.js
│ ├── simple.md
│ ├── test-auto-animate.html
│ ├── test-dependencies-async.html
│ ├── test-dependencies.html
│ ├── test-destroy.html
│ ├── test-grid-navigation.html
│ ├── test-iframe-backgrounds.html
│ ├── test-iframes.html
│ ├── test-markdown.html
│ ├── test-mathjax4.html
│ ├── test-multiple-instances-es5.html
│ ├── test-multiple-instances.html
│ ├── test-pdf.html
│ ├── test-plugins.html
│ ├── test-scroll.html
│ ├── test-state.html
│ ├── test.html
│ └── types/
│ └── plugin-imports.ts
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.styles.ts
└── vite.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .codespellrc
================================================
[codespell]
# Ref: https://github.com/codespell-project/codespell#using-a-config-file
skip = .git*,node_modules,package-lock.json,*.css,.codespellrc,react
check-hidden = true
# Ignore super long lines -- must be minimized etc, acronyms
# and some near hit variables
ignore-regex = ^.{120,}|\b(currentY|FOM)\b
# ignore-words-list =
================================================
FILE: .github/CONTRIBUTING.md
================================================
## Contributing
Please keep the [issue tracker](https://github.com/hakimel/reveal.js/issues) limited to **bug reports**.
### General Questions and Support
If you have questions about how to use reveal.js the best place to ask is in the [Discussions](https://github.com/hakimel/reveal.js/discussions). Anything that isn't a bug report should be posted as a dicussion instead.
### Bug Reports
When reporting a bug make sure to include information about which browser and operating system you are on as well as the necessary steps to reproduce the issue. If possible please include a link to a sample presentation where the bug can be tested.
### Pull Requests
- Should be submitted from a feature/topic branch (not your master)
- Should follow the coding style of the file you work in, most importantly:
- Tabs to indent
- Single-quoted strings
### Plugins
Please do not submit plugins as pull requests. They should be maintained in their own separate repository. More information here: https://github.com/hakimel/reveal.js/wiki/Plugin-Guidelines
================================================
FILE: .github/FUNDING.yml
================================================
github: [hakimel]
================================================
FILE: .github/workflows/spellcheck.yml
================================================
# Codespell configuration is within .codespellrc
---
name: Spellcheck
on:
push:
branches: [master]
pull_request:
branches: [master]
permissions:
contents: read
jobs:
codespell:
name: Check for spelling errors
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Codespell
uses: codespell-project/actions-codespell@v2
with:
skip: ./.git,./dist,package-lock.json,*.css,.codespellrc,./react/
================================================
FILE: .github/workflows/test.yml
================================================
name: Tests
on:
- push
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version:
- 20
- 22
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build --if-present
- run: npm test
env:
CI: true
================================================
FILE: .gitignore
================================================
.idea/
*.iml
*.iws
*.eml
out/
.DS_Store
.svn
log/*.log
tmp/**
node_modules/
.sass-cache
presentation
presentation.zip
dist/reveal.es5.js
react/dist
react/demo/dist
================================================
FILE: .prettierignore
================================================
js/**/*.js
plugin/**/*.js
**/*.md
test/**/*.html
examples/**/*.md
dist/**/*
*.html
================================================
FILE: .prettierrc
================================================
{
"useTabs": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100,
"singleQuote": true,
"bracketSameLine": false
}
================================================
FILE: LICENSE
================================================
Copyright (C) 2011-2026 Hakim El Hattab, http://hakim.se, and reveal.js contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: README.md
================================================
reveal.js is an open source HTML presentation framework. It enables anyone with a web browser to create beautiful presentations for free. Check out the live demo at [revealjs.com](https://revealjs.com/).
The framework comes with a powerful feature set including [nested slides](https://revealjs.com/vertical-slides/), [Markdown support](https://revealjs.com/markdown/), [Auto-Animate](https://revealjs.com/auto-animate/), [PDF export](https://revealjs.com/pdf-export/), [speaker notes](https://revealjs.com/speaker-view/), [LaTeX typesetting](https://revealjs.com/math/), [syntax highlighted code](https://revealjs.com/code/) and an [extensive API](https://revealjs.com/api/).
---
Want to create reveal.js presentation in a graphical editor? Try . It's made by the same people behind reveal.js.
---
### Getting started
- 🚀 [Install reveal.js](https://revealjs.com/installation)
- 👀 [View the demo presentation](https://revealjs.com/demo)
- 📖 [Read the documentation](https://revealjs.com/markup/)
- 🖌 [Try the visual editor for reveal.js at Slides.com](https://slides.com/)
- 🎬 [Watch the reveal.js video course (paid)](https://revealjs.com/course)
---
MIT licensed | Copyright © 2011-2026 Hakim El Hattab, https://hakim.se
================================================
FILE: css/layout.scss
================================================
/**
* Layout helpers.
*/
// Stretch an element vertically based on available space
.reveal .stretch,
.reveal .r-stretch {
max-width: none;
max-height: none;
}
.reveal pre.stretch code,
.reveal pre.r-stretch code {
height: 100%;
max-height: 100%;
box-sizing: border-box;
}
// Text that auto-fits its container
.reveal .r-fit-text {
display: inline-block; // https://github.com/rikschennink/fitty#performance
white-space: nowrap;
}
// Stack multiple elements on top of each other
.reveal .r-stack {
display: grid;
grid-template-rows: 100%;
}
.reveal .r-stack > * {
grid-area: 1/1;
margin: auto;
}
// Horizontal and vertical stacks
.reveal .r-vstack,
.reveal .r-hstack {
display: flex;
img,
video {
min-width: 0;
min-height: 0;
object-fit: contain;
}
}
.reveal .r-vstack {
flex-direction: column;
align-items: center;
justify-content: center;
}
.reveal .r-hstack {
flex-direction: row;
align-items: center;
justify-content: center;
}
// Naming based on tailwindcss
.reveal .items-stretch {
align-items: stretch;
}
.reveal .items-start {
align-items: flex-start;
}
.reveal .items-center {
align-items: center;
}
.reveal .items-end {
align-items: flex-end;
}
.reveal .justify-between {
justify-content: space-between;
}
.reveal .justify-around {
justify-content: space-around;
}
.reveal .justify-start {
justify-content: flex-start;
}
.reveal .justify-center {
justify-content: center;
}
.reveal .justify-end {
justify-content: flex-end;
}
================================================
FILE: css/print/paper.scss
================================================
@media print {
html:not(.print-pdf) {
overflow: visible;
width: auto;
height: auto;
body {
margin: 0;
padding: 0;
overflow: visible;
}
}
html:not(.print-pdf) .reveal {
background: #fff;
font-size: 20pt;
.controls,
.state-background,
.progress,
.backgrounds,
.slide-number {
display: none !important;
}
p,
td,
li {
font-size: 20pt !important;
color: #000;
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: #000 !important;
height: auto;
line-height: normal;
text-align: left;
letter-spacing: normal;
}
h1 {
font-size: 28pt !important;
}
h2 {
font-size: 24pt !important;
}
h3 {
font-size: 22pt !important;
}
h4 {
font-size: 22pt !important;
font-variant: small-caps;
}
h5 {
font-size: 21pt !important;
}
h6 {
font-size: 20pt !important;
font-style: italic;
}
a:link,
a:visited {
color: #000 !important;
font-weight: bold;
text-decoration: underline;
}
ul,
ol,
div,
p {
visibility: visible;
position: static;
width: auto;
height: auto;
display: block;
overflow: visible;
margin: 0;
text-align: left !important;
}
pre,
table {
margin-left: 0;
margin-right: 0;
}
pre code {
padding: 20px;
}
blockquote {
margin: 20px 0;
}
.slides {
position: static !important;
width: auto !important;
height: auto !important;
left: 0 !important;
top: 0 !important;
margin-left: 0 !important;
margin-top: 0 !important;
padding: 0 !important;
zoom: 1 !important;
transform: none !important;
overflow: visible !important;
display: block !important;
text-align: left !important;
perspective: none;
perspective-origin: 50% 50%;
}
.slides section {
visibility: visible !important;
position: static !important;
width: auto !important;
height: auto !important;
display: block !important;
overflow: visible !important;
left: 0 !important;
top: 0 !important;
margin-left: 0 !important;
margin-top: 0 !important;
padding: 60px 20px !important;
z-index: auto !important;
opacity: 1 !important;
page-break-after: always !important;
transform-style: flat !important;
transform: none !important;
transition: none !important;
}
.slides section.stack {
padding: 0 !important;
}
.slides section:last-of-type {
page-break-after: avoid !important;
}
.slides section .fragment {
opacity: 1 !important;
visibility: visible !important;
transform: none !important;
}
.r-fit-text {
white-space: normal !important;
}
section img {
display: block;
margin: 15px 0px;
background: rgba(255, 255, 255, 1);
border: 1px solid #666;
box-shadow: none;
}
section small {
font-size: 0.8em;
}
.hljs {
max-height: 100%;
white-space: pre-wrap;
word-wrap: break-word;
word-break: break-word;
font-size: 15pt;
}
.hljs .hljs-ln-numbers {
white-space: nowrap;
}
.hljs td {
font-size: inherit !important;
color: inherit !important;
}
}
}
================================================
FILE: css/print/pdf.scss
================================================
/**
* This stylesheet is used to print reveal.js
* presentations to PDF.
*
* https://revealjs.com/pdf-export/
*/
html.reveal-print {
* {
-webkit-print-color-adjust: exact;
}
& {
width: 100%;
height: 100%;
overflow: visible;
}
body {
margin: 0 auto !important;
border: 0;
padding: 0;
float: none !important;
overflow: visible;
}
/* Remove any elements not needed in print. */
.nestedarrow,
.reveal .controls,
.reveal .progress,
.reveal .playback,
.reveal.overview,
.state-background {
display: none !important;
}
.reveal pre code {
overflow: hidden !important;
}
.reveal {
width: auto !important;
height: auto !important;
overflow: hidden !important;
}
.reveal .slides {
position: static;
width: 100% !important;
height: auto !important;
zoom: 1 !important;
pointer-events: initial;
left: auto;
top: auto;
margin: 0 !important;
padding: 0 !important;
overflow: visible;
display: block;
perspective: none;
perspective-origin: 50% 50%;
}
.reveal .slides .pdf-page {
position: relative;
overflow: hidden;
z-index: 1;
page-break-after: always;
}
.reveal .slides .pdf-page:last-of-type {
page-break-after: avoid;
}
.reveal .slides section {
visibility: visible !important;
display: block !important;
position: absolute !important;
margin: 0 !important;
padding: 0 !important;
box-sizing: border-box !important;
min-height: 1px;
opacity: 1 !important;
transform-style: flat !important;
transform: none !important;
}
.reveal section.stack {
position: relative !important;
margin: 0 !important;
padding: 0 !important;
page-break-after: avoid !important;
height: auto !important;
min-height: auto !important;
}
.reveal img {
box-shadow: none;
}
/* Slide backgrounds are placed inside of their slide when exporting to PDF */
.reveal .backgrounds {
display: none;
}
.reveal .slide-background {
display: block !important;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: auto !important;
}
/* Display slide speaker notes when 'showNotes' is enabled */
.reveal.show-notes {
max-width: none;
max-height: none;
}
.reveal .speaker-notes-pdf {
display: block;
width: 100%;
height: auto;
max-height: none;
top: auto;
right: auto;
bottom: auto;
left: auto;
z-index: 100;
}
/* Layout option which makes notes appear on a separate page */
.reveal .speaker-notes-pdf[data-layout='separate-page'] {
position: relative;
color: inherit;
background-color: transparent;
padding: 20px;
page-break-after: always;
border: 0;
}
/* Display slide numbers when 'slideNumber' is enabled */
.reveal .slide-number-pdf {
display: block;
position: absolute;
font-size: 14px;
visibility: visible;
}
/* This accessibility tool is not useful in PDF and breaks it visually */
.aria-status {
display: none;
}
}
================================================
FILE: css/reset.css
================================================
/* http://meyerweb.com/eric/tools/css/reset/
v4.0 | 20180602
License: none (public domain)
*/
/* prettier-ignore */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
main, menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* prettier-ignore */
article, aside, details, figcaption, figure,
footer, header, hgroup, main, menu, nav, section {
display: block;
}
================================================
FILE: css/reveal.scss
================================================
/**
* reveal.js
* http://revealjs.com
* MIT licensed
*
* Copyright (C) Hakim El Hattab, https://hakim.se
*/
@use 'sass:math';
@use 'sass:meta';
@use 'layout';
/*********************************************
* GLOBAL STYLES
*********************************************/
html.reveal-full-page {
width: 100%;
height: 100%;
height: 100vh;
height: calc(var(--vh, 1vh) * 100);
height: 100dvh;
overflow: hidden;
}
.reveal-viewport {
height: 100%;
overflow: hidden;
position: relative;
line-height: 1;
margin: 0;
background-color: #fff;
color: #000;
--r-controls-spacing: 12px;
--r-overlay-header-height: 40px;
--r-overlay-margin: 0px;
--r-overlay-padding: 6px;
--r-overlay-gap: 5px;
}
@media screen and (max-width: 1024px), (max-height: 768px) {
.reveal-viewport {
--r-overlay-header-height: 26px;
}
}
// Force the presentation to cover the full viewport when we
// enter fullscreen mode. Fixes sizing issues in Safari.
.reveal-viewport:fullscreen {
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
transform: none !important;
}
/*********************************************
* VIEW FRAGMENTS
*********************************************/
.reveal .fragment {
transition: all 0.2s ease;
&:not(.custom) {
opacity: 0;
visibility: hidden;
will-change: opacity;
}
&.visible {
opacity: 1;
visibility: inherit;
}
&.disabled {
transition: none;
}
}
.reveal .fragment.grow {
opacity: 1;
visibility: inherit;
&.visible {
transform: scale(1.3);
}
}
.reveal .fragment.shrink {
opacity: 1;
visibility: inherit;
&.visible {
transform: scale(0.7);
}
}
.reveal .fragment.zoom-in {
transform: scale(0.1);
&.visible {
transform: none;
}
}
.reveal .fragment.fade-out {
opacity: 1;
visibility: inherit;
&.visible {
opacity: 0;
visibility: hidden;
}
}
.reveal .fragment.semi-fade-out {
opacity: 1;
visibility: inherit;
&.visible {
opacity: 0.5;
visibility: inherit;
}
}
.reveal .fragment.strike {
opacity: 1;
visibility: inherit;
&.visible {
text-decoration: line-through;
}
}
.reveal .fragment.fade-up {
transform: translate(0, 40px);
&.visible {
transform: translate(0, 0);
}
}
.reveal .fragment.fade-down {
transform: translate(0, -40px);
&.visible {
transform: translate(0, 0);
}
}
.reveal .fragment.fade-right {
transform: translate(-40px, 0);
&.visible {
transform: translate(0, 0);
}
}
.reveal .fragment.fade-left {
transform: translate(40px, 0);
&.visible {
transform: translate(0, 0);
}
}
.reveal .fragment.fade-in-then-out,
.reveal .fragment.current-visible {
opacity: 0;
visibility: hidden;
&.current-fragment {
opacity: 1;
visibility: inherit;
}
}
.reveal .fragment.fade-in-then-semi-out {
opacity: 0;
visibility: hidden;
&.visible {
opacity: 0.5;
visibility: inherit;
}
&.current-fragment {
opacity: 1;
visibility: inherit;
}
}
.reveal .fragment.highlight-red,
.reveal .fragment.highlight-current-red,
.reveal .fragment.highlight-green,
.reveal .fragment.highlight-current-green,
.reveal .fragment.highlight-blue,
.reveal .fragment.highlight-current-blue {
opacity: 1;
visibility: inherit;
}
.reveal .fragment.highlight-red.visible {
color: #ff2c2d;
}
.reveal .fragment.highlight-green.visible {
color: #17ff2e;
}
.reveal .fragment.highlight-blue.visible {
color: #1b91ff;
}
.reveal .fragment.highlight-current-red.current-fragment {
color: #ff2c2d;
}
.reveal .fragment.highlight-current-green.current-fragment {
color: #17ff2e;
}
.reveal .fragment.highlight-current-blue.current-fragment {
color: #1b91ff;
}
/*********************************************
* DEFAULT ELEMENT STYLES
*********************************************/
/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */
.reveal:after {
content: '';
font-style: italic;
}
.reveal iframe {
z-index: 1;
}
/** Prevents layering issues in certain browser/transition combinations */
.reveal a {
position: relative;
}
/*********************************************
* CONTROLS
*********************************************/
@keyframes bounce-right {
0%,
10%,
25%,
40%,
50% {
transform: translateX(0);
}
20% {
transform: translateX(10px);
}
30% {
transform: translateX(-5px);
}
}
@keyframes bounce-left {
0%,
10%,
25%,
40%,
50% {
transform: translateX(0);
}
20% {
transform: translateX(-10px);
}
30% {
transform: translateX(5px);
}
}
@keyframes bounce-down {
0%,
10%,
25%,
40%,
50% {
transform: translateY(0);
}
20% {
transform: translateY(10px);
}
30% {
transform: translateY(-5px);
}
}
$controlArrowSize: 3.6em;
$controlArrowSpacing: 1.4em;
$controlArrowLength: 2.6em;
$controlArrowThickness: 0.5em;
$controlsArrowAngle: 45deg;
$controlsArrowAngleHover: 40deg;
$controlsArrowAngleActive: 36deg;
@mixin controlsArrowTransform($angle) {
&:before {
transform: translateX(($controlArrowSize - $controlArrowLength) * 0.5)
translateY(($controlArrowSize - $controlArrowThickness) * 0.5) rotate($angle);
}
&:after {
transform: translateX(($controlArrowSize - $controlArrowLength) * 0.5)
translateY(($controlArrowSize - $controlArrowThickness) * 0.5) rotate(-$angle);
}
}
.reveal .controls {
display: none;
position: absolute;
top: auto;
bottom: var(--r-controls-spacing);
right: var(--r-controls-spacing);
left: auto;
z-index: 11;
color: #000;
pointer-events: none;
font-size: 10px;
button {
position: absolute;
padding: 0;
background-color: transparent;
border: 0;
outline: 0;
cursor: pointer;
color: currentColor;
transform: scale(0.9999);
transition:
color 0.2s ease,
opacity 0.2s ease,
transform 0.2s ease;
z-index: 2; // above slides
pointer-events: auto;
font-size: inherit;
visibility: hidden;
opacity: 0;
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.controls-arrow:before,
.controls-arrow:after {
content: '';
position: absolute;
top: 0;
left: 0;
width: $controlArrowLength;
height: $controlArrowThickness;
border-radius: $controlArrowThickness * 0.5;
background-color: currentColor;
transition:
all 0.15s ease,
background-color 0.8s ease;
transform-origin: math.div(math.floor(($controlArrowThickness * 0.5) * 10), 10) 50%;
will-change: transform;
}
.controls-arrow {
position: relative;
width: $controlArrowSize;
height: $controlArrowSize;
@include controlsArrowTransform($controlsArrowAngle);
&:hover {
@include controlsArrowTransform($controlsArrowAngleHover);
}
&:active {
@include controlsArrowTransform($controlsArrowAngleActive);
}
}
.navigate-left {
right: $controlArrowSize + $controlArrowSpacing * 2;
bottom: $controlArrowSpacing + $controlArrowSize * 0.5;
transform: translateX(-10px);
&.highlight {
animation: bounce-left 2s 50 both ease-out;
}
}
.navigate-right {
right: 0;
bottom: $controlArrowSpacing + $controlArrowSize * 0.5;
transform: translateX(10px);
.controls-arrow {
transform: rotate(180deg);
}
&.highlight {
animation: bounce-right 2s 50 both ease-out;
}
}
.navigate-up {
right: $controlArrowSpacing + $controlArrowSize * 0.5;
bottom: $controlArrowSpacing * 2 + $controlArrowSize;
transform: translateY(-10px);
.controls-arrow {
transform: rotate(90deg);
}
}
.navigate-down {
right: $controlArrowSpacing + $controlArrowSize * 0.5;
bottom: -$controlArrowSpacing;
padding-bottom: $controlArrowSpacing;
transform: translateY(10px);
.controls-arrow {
transform: rotate(-90deg);
}
&.highlight {
animation: bounce-down 2s 50 both ease-out;
}
}
// Back arrow style: "faded":
// Deemphasize backwards navigation arrows in favor of drawing
// attention to forwards navigation
&[data-controls-back-arrows='faded'] .navigate-up.enabled {
opacity: 0.3;
&:hover {
opacity: 1;
}
}
// Back arrow style: "hidden":
// Never show arrows for backwards navigation
&[data-controls-back-arrows='hidden'] .navigate-up.enabled {
opacity: 0;
visibility: hidden;
}
// Any control button that can be clicked is "enabled"
.enabled {
visibility: visible;
opacity: 0.9;
cursor: pointer;
transform: none;
}
// Any control button that leads to showing or hiding
// a fragment
.enabled.fragmented {
opacity: 0.5;
}
.enabled:hover,
.enabled.fragmented:hover {
opacity: 1;
}
}
.reveal:not(.rtl) .controls {
// Back arrow style: "faded":
// Deemphasize left arrow
&[data-controls-back-arrows='faded'] .navigate-left.enabled {
opacity: 0.3;
&:hover {
opacity: 1;
}
}
// Back arrow style: "hidden":
// Never show left arrow
&[data-controls-back-arrows='hidden'] .navigate-left.enabled {
opacity: 0;
visibility: hidden;
}
}
.reveal.rtl .controls {
// Back arrow style: "faded":
// Deemphasize right arrow in RTL mode
&[data-controls-back-arrows='faded'] .navigate-right.enabled {
opacity: 0.3;
&:hover {
opacity: 1;
}
}
// Back arrow style: "hidden":
// Never show right arrow in RTL mode
&[data-controls-back-arrows='hidden'] .navigate-right.enabled {
opacity: 0;
visibility: hidden;
}
}
.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-up,
.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-down {
display: none;
}
// Adjust the layout when there are no vertical slides
.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-left,
.reveal:not(.has-vertical-slides) .controls .navigate-left {
bottom: $controlArrowSpacing;
right: 0.5em + $controlArrowSpacing + $controlArrowSize;
}
.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-right,
.reveal:not(.has-vertical-slides) .controls .navigate-right {
bottom: $controlArrowSpacing;
right: 0.5em;
}
// Adjust the layout when there are no horizontal slides
.reveal:not(.has-horizontal-slides) .controls .navigate-up {
right: $controlArrowSpacing;
bottom: $controlArrowSpacing + $controlArrowSize;
}
.reveal:not(.has-horizontal-slides) .controls .navigate-down {
right: $controlArrowSpacing;
bottom: 0.5em;
}
// Invert arrows based on background color
.reveal.has-dark-background .controls {
color: #fff;
}
.reveal.has-light-background .controls {
color: #000;
}
// Disable active states on touch devices
.reveal.no-hover .controls .controls-arrow:hover,
.reveal.no-hover .controls .controls-arrow:active {
@include controlsArrowTransform($controlsArrowAngle);
}
// Edge aligned controls layout
@media screen and (min-width: 500px) {
.reveal-viewport {
--r-controls-spacing: 0.8em;
}
.reveal .controls[data-controls-layout='edges'] {
& {
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.navigate-left,
.navigate-right,
.navigate-up,
.navigate-down {
bottom: auto;
right: auto;
}
.navigate-left {
top: 50%;
left: var(--r-controls-spacing);
margin-top: -$controlArrowSize * 0.5;
}
.navigate-right {
top: 50%;
right: var(--r-controls-spacing);
margin-top: -$controlArrowSize * 0.5;
}
.navigate-up {
top: var(--r-controls-spacing);
left: 50%;
margin-left: -$controlArrowSize * 0.5;
}
.navigate-down {
bottom: calc(var(--r-controls-spacing) - #{$controlArrowSpacing} + 0.3em);
left: 50%;
margin-left: -$controlArrowSize * 0.5;
}
}
}
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
position: absolute;
display: none;
height: 3px;
width: 100%;
bottom: 0;
left: 0;
z-index: 10;
background-color: rgba(0, 0, 0, 0.2);
color: #fff;
}
.reveal .progress:after {
content: '';
display: block;
position: absolute;
height: 10px;
width: 100%;
top: -10px;
}
.reveal .progress span {
display: block;
height: 100%;
width: 100%;
background-color: currentColor;
transition: transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transform-origin: 0 0;
transform: scaleX(0);
}
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
position: absolute;
display: block;
right: 8px;
bottom: 8px;
z-index: 31;
font-family: Helvetica, sans-serif;
font-size: 12px;
line-height: 1;
color: #fff;
background-color: rgba(0, 0, 0, 0.4);
padding: 5px;
}
.reveal .slide-number a {
color: currentColor;
}
.reveal .slide-number-delimiter {
margin: 0 3px;
}
/*********************************************
* SLIDES
*********************************************/
.reveal {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
touch-action: pinch-zoom;
}
// Swiping on an embedded deck should not block page scrolling...
.reveal.embedded {
touch-action: pan-y;
}
// ... unless we're on a vertical slide
.reveal.embedded.is-vertical-slide {
touch-action: none;
}
.reveal .slides {
position: absolute;
width: 100%;
height: 100%;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
pointer-events: none;
overflow: visible;
z-index: 1;
text-align: center;
perspective: 600px;
perspective-origin: 50% 40%;
}
.reveal .slides > section {
perspective: 600px;
}
.reveal .slides > section,
.reveal .slides > section > section {
display: none;
position: absolute;
width: 100%;
pointer-events: auto;
z-index: 10;
transform-style: flat;
transition:
transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
}
/* Global transition speed settings */
.reveal[data-transition-speed='fast'] .slides section {
transition-duration: 400ms;
}
.reveal[data-transition-speed='slow'] .slides section {
transition-duration: 1200ms;
}
/* Slide-specific transition speed overrides */
.reveal .slides section[data-transition-speed='fast'] {
transition-duration: 400ms;
}
.reveal .slides section[data-transition-speed='slow'] {
transition-duration: 1200ms;
}
.reveal .slides > section.stack {
padding-top: 0;
padding-bottom: 0;
pointer-events: none;
height: 100%;
}
.reveal .slides > section.present,
.reveal .slides > section > section.present {
display: block;
z-index: 11;
opacity: 1;
}
.reveal .slides > section:empty,
.reveal .slides > section > section:empty,
.reveal .slides > section[data-background-interactive],
.reveal .slides > section > section[data-background-interactive] {
pointer-events: none;
}
.reveal.center,
.reveal.center .slides,
.reveal.center .slides section {
min-height: 0 !important;
}
/* Don't allow interaction with invisible slides */
.reveal .slides > section:not(.present),
.reveal .slides > section > section:not(.present) {
pointer-events: none;
}
.reveal.overview .slides > section,
.reveal.overview .slides > section > section {
pointer-events: auto;
}
.reveal .slides > section.past,
.reveal .slides > section.future,
.reveal .slides > section.past > section,
.reveal .slides > section.future > section,
.reveal .slides > section > section.past,
.reveal .slides > section > section.future {
opacity: 0;
}
/*********************************************
* Mixins for readability of transitions
*********************************************/
@mixin transition-global($style) {
.reveal .slides section[data-transition='#{$style}'],
.reveal.#{$style} .slides section:not([data-transition]) {
@content;
}
}
@mixin transition-stack($style) {
.reveal .slides section[data-transition='#{$style}'].stack,
.reveal.#{$style} .slides section.stack {
@content;
}
}
@mixin transition-horizontal-past($style) {
.reveal .slides > section[data-transition='#{$style}'].past,
.reveal .slides > section[data-transition~='#{$style}-out'].past,
.reveal.#{$style} .slides > section:not([data-transition]).past {
@content;
}
}
@mixin transition-horizontal-future($style) {
.reveal .slides > section[data-transition='#{$style}'].future,
.reveal .slides > section[data-transition~='#{$style}-in'].future,
.reveal.#{$style} .slides > section:not([data-transition]).future {
@content;
}
}
@mixin transition-vertical-past($style) {
.reveal .slides > section > section[data-transition='#{$style}'].past,
.reveal .slides > section > section[data-transition~='#{$style}-out'].past,
.reveal.#{$style} .slides > section > section:not([data-transition]).past {
@content;
}
}
@mixin transition-vertical-future($style) {
.reveal .slides > section > section[data-transition='#{$style}'].future,
.reveal .slides > section > section[data-transition~='#{$style}-in'].future,
.reveal.#{$style} .slides > section > section:not([data-transition]).future {
@content;
}
}
/*********************************************
* SLIDE TRANSITION
* Aliased 'linear' for backwards compatibility
*********************************************/
@each $stylename in slide, linear {
@include transition-horizontal-past(#{$stylename}) {
transform: translate(-150%, 0);
}
@include transition-horizontal-future(#{$stylename}) {
transform: translate(150%, 0);
}
@include transition-vertical-past(#{$stylename}) {
transform: translate(0, -150%);
}
@include transition-vertical-future(#{$stylename}) {
transform: translate(0, 150%);
}
}
/*********************************************
* CONVEX TRANSITION
* Aliased 'default' for backwards compatibility
*********************************************/
@each $stylename in default, convex {
@include transition-stack(#{$stylename}) {
transform-style: preserve-3d;
}
@include transition-horizontal-past(#{$stylename}) {
transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
}
@include transition-horizontal-future(#{$stylename}) {
transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
}
@include transition-vertical-past(#{$stylename}) {
transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);
}
@include transition-vertical-future(#{$stylename}) {
transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);
}
}
/*********************************************
* CONCAVE TRANSITION
*********************************************/
@include transition-stack(concave) {
transform-style: preserve-3d;
}
@include transition-horizontal-past(concave) {
transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
}
@include transition-horizontal-future(concave) {
transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
}
@include transition-vertical-past(concave) {
transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0);
}
@include transition-vertical-future(concave) {
transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0);
}
/*********************************************
* ZOOM TRANSITION
*********************************************/
@include transition-global(zoom) {
transition-timing-function: ease;
}
@include transition-horizontal-past(zoom) {
visibility: hidden;
transform: scale(16);
}
@include transition-horizontal-future(zoom) {
visibility: hidden;
transform: scale(0.2);
}
@include transition-vertical-past(zoom) {
transform: scale(16);
}
@include transition-vertical-future(zoom) {
transform: scale(0.2);
}
/*********************************************
* CUBE TRANSITION
*
* WARNING:
* this is deprecated and will be removed in a
* future version.
*********************************************/
.reveal.cube .slides {
perspective: 1300px;
}
.reveal.cube .slides section {
padding: 30px;
min-height: 700px;
backface-visibility: hidden;
box-sizing: border-box;
transform-style: preserve-3d;
}
.reveal.center.cube .slides section {
min-height: 0;
}
.reveal.cube .slides section:not(.stack):before {
content: '';
position: absolute;
display: block;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: rgba(0, 0, 0, 0.1);
border-radius: 4px;
transform: translateZ(-20px);
}
.reveal.cube .slides section:not(.stack):after {
content: '';
position: absolute;
display: block;
width: 90%;
height: 30px;
left: 5%;
bottom: 0;
background: none;
z-index: 1;
border-radius: 4px;
box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);
transform: translateZ(-90px) rotateX(65deg);
}
.reveal.cube .slides > section.stack {
padding: 0;
background: none;
}
.reveal.cube .slides > section.past {
transform-origin: 100% 0%;
transform: translate3d(-100%, 0, 0) rotateY(-90deg);
}
.reveal.cube .slides > section.future {
transform-origin: 0% 0%;
transform: translate3d(100%, 0, 0) rotateY(90deg);
}
.reveal.cube .slides > section > section.past {
transform-origin: 0% 100%;
transform: translate3d(0, -100%, 0) rotateX(90deg);
}
.reveal.cube .slides > section > section.future {
transform-origin: 0% 0%;
transform: translate3d(0, 100%, 0) rotateX(-90deg);
}
/*********************************************
* PAGE TRANSITION
*
* WARNING:
* this is deprecated and will be removed in a
* future version.
*********************************************/
.reveal.page .slides {
perspective-origin: 0% 50%;
perspective: 3000px;
}
.reveal.page .slides section {
padding: 30px;
min-height: 700px;
box-sizing: border-box;
transform-style: preserve-3d;
}
.reveal.page .slides section.past {
z-index: 12;
}
.reveal.page .slides section:not(.stack):before {
content: '';
position: absolute;
display: block;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: rgba(0, 0, 0, 0.1);
transform: translateZ(-20px);
}
.reveal.page .slides section:not(.stack):after {
content: '';
position: absolute;
display: block;
width: 90%;
height: 30px;
left: 5%;
bottom: 0;
background: none;
z-index: 1;
border-radius: 4px;
box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);
transform: translateZ(-90px) rotateX(65deg);
}
.reveal.page .slides > section.stack {
padding: 0;
background: none;
}
.reveal.page .slides > section.past {
transform-origin: 0% 0%;
transform: translate3d(-40%, 0, 0) rotateY(-80deg);
}
.reveal.page .slides > section.future {
transform-origin: 100% 0%;
transform: translate3d(0, 0, 0);
}
.reveal.page .slides > section > section.past {
transform-origin: 0% 0%;
transform: translate3d(0, -40%, 0) rotateX(80deg);
}
.reveal.page .slides > section > section.future {
transform-origin: 0% 100%;
transform: translate3d(0, 0, 0);
}
/*********************************************
* FADE TRANSITION
*********************************************/
.reveal .slides section[data-transition='fade'],
.reveal.fade .slides section:not([data-transition]),
.reveal.fade .slides > section > section:not([data-transition]) {
transform: none;
transition: opacity 0.5s;
}
.reveal.fade.overview .slides section,
.reveal.fade.overview .slides > section > section {
transition: none;
}
/*********************************************
* NO TRANSITION
*********************************************/
@include transition-global(none) {
transform: none;
transition: none;
}
/*********************************************
* PAUSED MODE
*********************************************/
.reveal .pause-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: black;
visibility: hidden;
opacity: 0;
z-index: 100;
transition: all 1s ease;
}
.reveal .pause-overlay .resume-button {
position: absolute;
bottom: 20px;
right: 20px;
color: #ccc;
border-radius: 2px;
padding: 6px 14px;
border: 2px solid #ccc;
font-size: 16px;
background: transparent;
cursor: pointer;
&:hover {
color: #fff;
border-color: #fff;
}
}
.reveal.paused .pause-overlay {
visibility: visible;
opacity: 1;
}
/*********************************************
* FALLBACK
*********************************************/
.reveal .no-transition,
.reveal .no-transition *,
.reveal .slides.disable-slide-transitions section {
transition: none !important;
}
.reveal .slides.disable-slide-transitions section {
transform: none !important;
}
/*********************************************
* PER-SLIDE BACKGROUNDS
*********************************************/
.reveal .backgrounds {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
perspective: 600px;
}
.reveal .slide-background {
display: none;
position: absolute;
width: 100%;
height: 100%;
opacity: 0;
visibility: hidden;
overflow: hidden;
background-color: rgba(0, 0, 0, 0);
transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
}
.reveal .slide-background-content {
position: absolute;
width: 100%;
height: 100%;
background-position: 50% 50%;
background-repeat: no-repeat;
background-size: cover;
}
.reveal .slide-background.stack {
display: block;
}
.reveal .slide-background.present {
opacity: 1;
visibility: visible;
z-index: 2;
}
.print-pdf .reveal .slide-background {
opacity: 1 !important;
visibility: visible !important;
}
/* Video backgrounds */
.reveal .slide-background video {
position: absolute;
width: 100%;
height: 100%;
max-width: none;
max-height: none;
top: 0;
left: 0;
object-fit: cover;
}
.reveal .slide-background[data-background-size='contain'] video {
object-fit: contain;
}
/* Immediate transition style */
.reveal[data-background-transition='none']
> .backgrounds
.slide-background:not([data-background-transition]),
.reveal > .backgrounds .slide-background[data-background-transition='none'] {
transition: none;
}
/* Slide */
.reveal[data-background-transition='slide']
> .backgrounds
.slide-background:not([data-background-transition]),
.reveal > .backgrounds .slide-background[data-background-transition='slide'] {
opacity: 1;
}
.reveal[data-background-transition='slide']
> .backgrounds
.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='slide'] {
transform: translate(-100%, 0);
}
.reveal[data-background-transition='slide']
> .backgrounds
.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='slide'] {
transform: translate(100%, 0);
}
.reveal[data-background-transition='slide']
> .backgrounds
.slide-background
> .slide-background.past:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.past[data-background-transition='slide'] {
transform: translate(0, -100%);
}
.reveal[data-background-transition='slide']
> .backgrounds
.slide-background
> .slide-background.future:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.future[data-background-transition='slide'] {
transform: translate(0, 100%);
}
/* Convex */
.reveal[data-background-transition='convex']
> .backgrounds
.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='convex'] {
opacity: 0;
transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
}
.reveal[data-background-transition='convex']
> .backgrounds
.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='convex'] {
opacity: 0;
transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
}
.reveal[data-background-transition='convex']
> .backgrounds
.slide-background
> .slide-background.past:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.past[data-background-transition='convex'] {
opacity: 0;
transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0);
}
.reveal[data-background-transition='convex']
> .backgrounds
.slide-background
> .slide-background.future:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.future[data-background-transition='convex'] {
opacity: 0;
transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0);
}
/* Concave */
.reveal[data-background-transition='concave']
> .backgrounds
.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='concave'] {
opacity: 0;
transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
}
.reveal[data-background-transition='concave']
> .backgrounds
.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='concave'] {
opacity: 0;
transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
}
.reveal[data-background-transition='concave']
> .backgrounds
.slide-background
> .slide-background.past:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.past[data-background-transition='concave'] {
opacity: 0;
transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0);
}
.reveal[data-background-transition='concave']
> .backgrounds
.slide-background
> .slide-background.future:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.future[data-background-transition='concave'] {
opacity: 0;
transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0);
}
/* Zoom */
.reveal[data-background-transition='zoom']
> .backgrounds
.slide-background:not([data-background-transition]),
.reveal > .backgrounds .slide-background[data-background-transition='zoom'] {
transition-timing-function: ease;
}
.reveal[data-background-transition='zoom']
> .backgrounds
.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='zoom'] {
opacity: 0;
visibility: hidden;
transform: scale(16);
}
.reveal[data-background-transition='zoom']
> .backgrounds
.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='zoom'] {
opacity: 0;
visibility: hidden;
transform: scale(0.2);
}
.reveal[data-background-transition='zoom']
> .backgrounds
.slide-background
> .slide-background.past:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.past[data-background-transition='zoom'] {
opacity: 0;
visibility: hidden;
transform: scale(16);
}
.reveal[data-background-transition='zoom']
> .backgrounds
.slide-background
> .slide-background.future:not([data-background-transition]),
.reveal
> .backgrounds
.slide-background
> .slide-background.future[data-background-transition='zoom'] {
opacity: 0;
visibility: hidden;
transform: scale(0.2);
}
/* Global transition speed settings */
.reveal[data-transition-speed='fast'] > .backgrounds .slide-background {
transition-duration: 400ms;
}
.reveal[data-transition-speed='slow'] > .backgrounds .slide-background {
transition-duration: 1200ms;
}
/*********************************************
* AUTO ANIMATE
*********************************************/
.reveal [data-auto-animate-target^='unmatched'] {
will-change: opacity;
}
.reveal
section[data-auto-animate]:not(.stack):not([data-auto-animate='running'])
[data-auto-animate-target^='unmatched'] {
opacity: 0;
}
/*********************************************
* OVERVIEW
*********************************************/
.reveal.overview {
perspective-origin: 50% 50%;
perspective: 700px;
.slides section {
height: 100%;
top: 0 !important;
opacity: 1 !important;
overflow: hidden;
visibility: visible !important;
cursor: pointer;
box-sizing: border-box;
}
.slides section:hover,
.slides section.present {
outline: 10px solid rgba(150, 150, 150, 0.6);
outline-offset: 10px;
}
.slides section.present {
outline: 10px solid var(--r-link-color);
}
.slides section .fragment {
opacity: 1;
transition: none;
}
.slides section:after,
.slides section:before {
display: none !important;
}
.slides > section.stack {
padding: 0;
top: 0 !important;
background: none;
outline: none;
overflow: visible;
}
.backgrounds {
perspective: inherit;
}
.backgrounds .slide-background {
opacity: 1;
visibility: visible;
// This can't be applied to the slide itself in Safari
outline: 10px solid rgba(150, 150, 150, 0.1);
outline-offset: 10px;
}
.backgrounds .slide-background.stack {
overflow: visible;
}
}
// Disable transitions transitions while we're activating
// or deactivating the overview mode.
.reveal.overview .slides section,
.reveal.overview-deactivating .slides section {
transition: none;
}
.reveal.overview .backgrounds .slide-background,
.reveal.overview-deactivating .backgrounds .slide-background {
transition: none;
}
/*********************************************
* RTL SUPPORT
*********************************************/
.reveal.rtl .slides,
.reveal.rtl .slides h1,
.reveal.rtl .slides h2,
.reveal.rtl .slides h3,
.reveal.rtl .slides h4,
.reveal.rtl .slides h5,
.reveal.rtl .slides h6 {
direction: rtl;
font-family: sans-serif;
}
.reveal.rtl pre,
.reveal.rtl code {
direction: ltr;
}
.reveal.rtl ol,
.reveal.rtl ul {
text-align: right;
}
.reveal.rtl .progress span {
transform-origin: 100% 0;
}
/*********************************************
* PARALLAX BACKGROUND
*********************************************/
.reveal.has-parallax-background .backgrounds {
transition: all 0.8s ease;
}
/* Global transition speed settings */
.reveal.has-parallax-background[data-transition-speed='fast'] .backgrounds {
transition-duration: 400ms;
}
.reveal.has-parallax-background[data-transition-speed='slow'] .backgrounds {
transition-duration: 1200ms;
}
/*********************************************
* OVERLAY FOR LINK PREVIEWS AND HELP
*********************************************/
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes scale-up {
from {
transform: scale(0.95);
}
to {
transform: scale(1);
}
}
.reveal [data-preview-image],
.reveal [data-preview-video],
.reveal [data-preview-link]:not(a):not([data-preview-link='false']) {
cursor: zoom-in;
}
.r-overlay {
position: absolute;
top: var(--r-overlay-margin);
right: var(--r-overlay-margin);
bottom: var(--r-overlay-margin);
left: var(--r-overlay-margin);
border-radius: min(var(--r-overlay-margin), 6px);
z-index: 99;
background: rgba(0, 0, 0, 0.95);
backdrop-filter: blur(10px);
transition: all 0.3s ease;
color: #fff;
animation: fade-in 0.3s ease;
font-family:
ui-sans-serif,
system-ui,
-apple-system,
Helvetica,
sans-serif;
}
.r-overlay-viewport {
position: absolute;
top: var(--r-overlay-padding);
right: var(--r-overlay-padding);
bottom: var(--r-overlay-padding);
left: var(--r-overlay-padding);
gap: var(--r-overlay-gap);
display: flex;
flex-direction: column;
}
.r-overlay-header {
display: flex;
z-index: 2;
box-sizing: border-box;
align-items: center;
justify-content: flex-end;
height: var(--r-overlay-header-height);
gap: 6px;
}
.r-overlay-header .r-overlay-header-button {
all: unset;
display: flex;
align-items: center;
justify-content: center;
min-width: var(--r-overlay-header-height);
min-height: var(--r-overlay-header-height);
padding: 0 calc(var(--r-overlay-header-height) / 4);
opacity: 1;
border-radius: 6px;
font-size: 18px;
gap: 8px;
cursor: pointer;
box-sizing: border-box;
}
.r-overlay-header .r-overlay-header-button:hover {
opacity: 1;
background-color: rgba(255, 255, 255, 0.15);
}
.r-overlay-header .icon {
display: inline-block;
width: 20px;
height: 20px;
background-position: 50% 50%;
background-size: 100%;
background-repeat: no-repeat;
}
.r-overlay-close .icon {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTIuODU0IDIuODU0YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcuNSA2Ljc5MyAyLjg1NCAyLjE0NmEuNS41IDAgMSAwLS43MDguNzA4TDYuNzkzIDcuNWwtNC42NDcgNC42NDZhLjUuNSAwIDAgMCAuNzA4LjcwOEw3LjUgOC4yMDdsNC42NDYgNC42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC4yMDcgNy41bDQuNjQ3LTQuNjQ2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);
}
.r-overlay-external .icon {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyAyYTEgMSAwIDAgMC0xIDF2OWExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMVY4LjVhLjUuNSAwIDAgMC0xIDBWMTJIM1YzaDMuNWEuNS41IDAgMCAwIDAtMUgzWm05Ljg1NC4xNDZhLjUuNSAwIDAgMSAuMTQ2LjM1MVY1LjVhLjUuNSAwIDAgMS0xIDBWMy43MDdMNi44NTQgOC44NTRhLjUuNSAwIDEgMS0uNzA4LS43MDhMMTEuMjkzIDNIOS41YS41LjUgMCAwIDEgMC0xaDNhLjQ5OS40OTkgMCAwIDEgLjM1NC4xNDZaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);
}
.r-overlay-content {
position: relative;
display: grid;
place-items: center;
border-radius: 6px;
overflow: hidden;
flex-grow: 1;
background-color: rgba(20, 20, 20, 0.8);
animation: scale-up 0.5s cubic-bezier(0.26, 0.86, 0.44, 0.985);
}
.r-overlay-spinner {
position: absolute;
display: block;
top: 50%;
left: 50%;
width: 32px;
height: 32px;
margin: -16px 0 0 -16px;
z-index: 10;
background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);
visibility: hidden;
opacity: 0;
}
// Preview overlay
.r-overlay-preview .r-overlay-content iframe {
width: 100%;
height: 100%;
max-width: 100%;
max-height: 100%;
border: 0;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
}
.r-overlay-preview[data-state='loaded'] iframe {
opacity: 1;
visibility: visible;
}
.r-overlay-preview .r-overlay-content img,
.r-overlay-preview .r-overlay-content video {
position: absolute;
max-width: 100%;
max-height: 100%;
width: 100%;
height: 100%;
margin: 0;
object-fit: scale-down;
}
.r-overlay-preview[data-preview-fit='none'] img,
.r-overlay-preview[data-preview-fit='none'] video {
object-fit: none;
}
.r-overlay-preview[data-preview-fit='scale-down'] img,
.r-overlay-preview[data-preview-fit='scale-down'] video {
object-fit: scale-down;
}
.r-overlay-preview[data-preview-fit='contain'] img,
.r-overlay-preview[data-preview-fit='contain'] video {
object-fit: contain;
}
.r-overlay-preview[data-preview-fit='cover'] img,
.r-overlay-preview[data-preview-fit='cover'] video {
object-fit: cover;
}
.r-overlay-preview[data-state='loaded'] .r-overlay-content-inner {
position: absolute;
z-index: -1;
left: 0;
top: 45%;
width: 100%;
text-align: center;
letter-spacing: normal;
}
.r-overlay-preview .r-overlay-error {
font-size: 18px;
color: orange;
}
.r-overlay-preview .x-frame-error {
opacity: 0;
transition: opacity 0.3s ease 0.3s;
}
.r-overlay-preview[data-state='loaded'] .x-frame-error {
opacity: 1;
}
.r-overlay-preview[data-state='loading'] .r-overlay-spinner {
opacity: 0.6;
visibility: visible;
}
// Help overlay
.r-overlay-help .r-overlay-content {
overflow: auto;
}
.r-overlay-help-content {
max-width: 560px;
padding: 20px 0;
margin: auto;
text-align: center;
letter-spacing: normal;
}
.r-overlay-help-content .title {
font-size: 20px;
margin-top: 0;
}
/* Specificity battle with reveal.js theme table styles */
.r-overlay-help .r-overlay-help-content table {
border: 1px solid #fff;
border-collapse: collapse;
font-size: 16px;
text-align: left;
}
.r-overlay-help .r-overlay-help-content table th,
.r-overlay-help .r-overlay-help-content table td {
width: 240px;
padding: 14px;
border: 1px solid #fff;
vertical-align: middle;
}
.r-overlay-help .r-overlay-help-content table th {
padding-top: 20px;
padding-bottom: 20px;
}
/*********************************************
* PLAYBACK COMPONENT
*********************************************/
.reveal .playback {
position: absolute;
left: 15px;
bottom: 20px;
z-index: 30;
cursor: pointer;
transition: all 400ms ease;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.reveal.overview .playback {
opacity: 0;
visibility: hidden;
}
/*********************************************
* CODE HIGHLGIHTING
*********************************************/
.reveal .hljs {
min-height: 100%;
}
.reveal .hljs table {
margin: initial;
}
.reveal .hljs-ln-code,
.reveal .hljs-ln-numbers {
padding: 0;
border: 0;
}
.reveal .hljs-ln-numbers {
opacity: 0.6;
padding-right: 0.75em;
text-align: right;
vertical-align: top;
}
.reveal .hljs.has-highlights tr:not(.highlight-line) {
opacity: 0.4;
}
.reveal .hljs.has-highlights.fragment {
transition: all 0.2s ease;
}
.reveal .hljs:not(:first-child).fragment {
position: absolute;
top: 0;
left: 0;
width: 100%;
box-sizing: border-box;
}
.reveal pre[data-auto-animate-target] {
overflow: hidden;
}
.reveal pre[data-auto-animate-target] code {
height: 100%;
}
/*********************************************
* ROLLING LINKS
*********************************************/
.reveal .roll {
display: inline-block;
line-height: 1.2;
overflow: hidden;
vertical-align: top;
perspective: 400px;
perspective-origin: 50% 50%;
}
.reveal .roll:hover {
background: none;
text-shadow: none;
}
.reveal .roll span {
display: block;
position: relative;
padding: 0 2px;
pointer-events: none;
transition: all 400ms ease;
transform-origin: 50% 0%;
transform-style: preserve-3d;
backface-visibility: hidden;
}
.reveal .roll:hover span {
background: rgba(0, 0, 0, 0.5);
transform: translate3d(0px, 0px, -45px) rotateX(90deg);
}
.reveal .roll span:after {
content: attr(data-title);
display: block;
position: absolute;
left: 0;
top: 0;
padding: 0 2px;
backface-visibility: hidden;
transform-origin: 50% 0%;
transform: translate3d(0px, 110%, 0px) rotateX(-90deg);
}
/*********************************************
* SPEAKER NOTES
*********************************************/
$notesWidthPercent: 25%;
// Hide on-page notes
.reveal aside.notes {
display: none;
}
// An interface element that can optionally be used to show the
// speaker notes to all viewers, on top of the presentation
.reveal .speaker-notes {
display: none;
position: absolute;
width: math.div($notesWidthPercent, (1 - math.div($notesWidthPercent, 100))) * 1%;
height: 100%;
top: 0;
left: 100%;
padding: 14px 18px 14px 18px;
z-index: 1;
font-size: 18px;
line-height: 1.4;
border: 1px solid rgba(0, 0, 0, 0.05);
color: #222;
background-color: #f5f5f5;
overflow: auto;
box-sizing: border-box;
text-align: left;
font-family: Helvetica, sans-serif;
-webkit-overflow-scrolling: touch;
.notes-placeholder {
color: #ccc;
font-style: italic;
}
&:focus {
outline: none;
}
&:before {
content: 'Speaker notes';
display: block;
margin-bottom: 10px;
opacity: 0.5;
}
}
.reveal.show-notes {
max-width: 100% - $notesWidthPercent;
overflow: visible;
}
.reveal.show-notes .speaker-notes {
display: block;
}
@media screen and (min-width: 1600px) {
.reveal .speaker-notes {
font-size: 20px;
}
}
@media screen and (max-width: 1024px) {
.reveal.show-notes {
border-left: 0;
max-width: none;
max-height: 70%;
max-height: 70vh;
overflow: visible;
}
.reveal.show-notes .speaker-notes {
top: 100%;
left: 0;
width: 100%;
height: 30vh;
border: 0;
}
}
@media screen and (max-width: 600px) {
.reveal.show-notes {
max-height: 60%;
max-height: 60vh;
}
.reveal.show-notes .speaker-notes {
top: 100%;
height: 40vh;
}
.reveal .speaker-notes {
font-size: 14px;
}
}
/*********************************************
* JUMP-TO-SLIDE COMPONENT
*********************************************/
.reveal .jump-to-slide {
position: absolute;
top: 15px;
left: 15px;
z-index: 30;
font-size: 32px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.reveal .jump-to-slide-input {
background: transparent;
padding: 8px;
font-size: inherit;
color: currentColor;
border: 0;
}
.reveal .jump-to-slide-input::placeholder {
color: currentColor;
opacity: 0.5;
}
.reveal.has-dark-background .jump-to-slide-input {
color: #fff;
}
.reveal.has-light-background .jump-to-slide-input {
color: #222;
}
.reveal .jump-to-slide-input:focus {
outline: none;
}
/*********************************************
* MANUAL MEDIA PLAY BUTTON
*********************************************/
.reveal .r-overlay-button {
all: unset;
position: absolute;
display: flex;
align-items: center;
justify-content: center;
padding: 10px;
border-radius: 5px;
font-size: 0.4em;
z-index: 30;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-appearance: none;
appearance: none;
color: #fff;
background: rgba(0, 0, 0, 0.7);
&:hover {
background: rgba(0, 0, 0, 0.9);
}
}
.reveal.has-light-background .r-overlay-button {
color: #222;
background: rgba(255, 255, 255, 0.7);
&:hover {
background: rgba(255, 255, 255, 0.9);
}
}
.reveal .r-media-play-button {
left: 15px;
bottom: 20px;
}
/*********************************************
* ZOOM PLUGIN
*********************************************/
.zoomed .reveal *,
.zoomed .reveal *:before,
.zoomed .reveal *:after {
backface-visibility: visible !important;
}
.zoomed .reveal .progress,
.zoomed .reveal .controls {
opacity: 0;
}
.zoomed .reveal .roll span {
background: none;
}
.zoomed .reveal .roll span:after {
visibility: hidden;
}
/*********************************************
* SCROLL VIEW
*********************************************/
.reveal-viewport.loading-scroll-mode {
visibility: hidden;
}
.reveal-viewport.reveal-scroll {
& {
margin: 0 auto;
overflow: auto;
overflow-x: hidden;
overflow-y: auto;
z-index: 1;
--r-scrollbar-width: 7px;
--r-scrollbar-trigger-size: 5px;
--r-controls-spacing: 8px;
}
@media screen and (max-width: 500px) {
--r-scrollbar-width: 3px;
--r-scrollbar-trigger-size: 3px;
}
.controls,
.progress,
.playback,
.backgrounds,
.slide-number,
.speaker-notes {
display: none !important;
}
.r-overlay,
.pause-overlay,
.r-media-play-button {
position: fixed;
}
.reveal {
overflow: visible;
touch-action: manipulation;
}
.slides {
position: static;
pointer-events: initial;
left: auto;
top: auto;
width: 100% !important;
margin: 0;
padding: 0;
overflow: visible;
display: block;
perspective: none;
perspective-origin: 50% 50%;
}
.scroll-page {
position: relative;
width: 100%;
height: calc(var(--page-height) + var(--page-scroll-padding));
z-index: 1;
overflow: visible;
}
.scroll-page-sticky {
position: sticky;
height: var(--page-height);
top: 0px;
}
.scroll-page-content {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
.scroll-page section {
visibility: visible !important;
display: block !important;
position: absolute !important;
width: var(--slide-width) !important;
height: var(--slide-height) !important;
top: 50% !important;
left: 50% !important;
opacity: 1 !important;
transform: scale(var(--slide-scale)) translate(-50%, -50%) !important;
transform-style: flat !important;
transform-origin: 0 0 !important;
}
.slide-background {
display: block !important;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: auto !important;
visibility: visible;
opacity: 1;
touch-action: manipulation;
}
}
// Chromium
.reveal-viewport.reveal-scroll[data-scrollbar='true']::-webkit-scrollbar,
.reveal-viewport.reveal-scroll[data-scrollbar='auto']::-webkit-scrollbar {
display: none;
}
// Firefox
.reveal-viewport.reveal-scroll[data-scrollbar='true'],
.reveal-viewport.reveal-scroll[data-scrollbar='auto'] {
scrollbar-width: none;
}
.reveal.has-dark-background,
.reveal-viewport.has-dark-background {
--r-overlay-element-bg-color: 240, 240, 240;
--r-overlay-element-fg-color: 0, 0, 0;
}
.reveal.has-light-background,
.reveal-viewport.has-light-background {
--r-overlay-element-bg-color: 0, 0, 0;
--r-overlay-element-fg-color: 240, 240, 240;
}
.reveal-viewport.reveal-scroll .scrollbar {
position: sticky;
top: 50%;
z-index: 20;
opacity: 0;
transition: all 0.3s ease;
&.visible,
&:hover {
opacity: 1;
}
.scrollbar-inner {
position: absolute;
width: var(--r-scrollbar-width);
height: calc(var(--viewport-height) - var(--r-controls-spacing) * 2);
right: var(--r-controls-spacing);
top: 0;
transform: translateY(-50%);
border-radius: var(--r-scrollbar-width);
z-index: 10;
}
.scrollbar-playhead {
position: absolute;
width: var(--r-scrollbar-width);
height: var(--r-scrollbar-width);
top: 0;
left: 0;
border-radius: var(--r-scrollbar-width);
background-color: rgba(var(--r-overlay-element-bg-color), 1);
z-index: 11;
transition: background-color 0.2s ease;
}
.scrollbar-slide {
position: absolute;
width: 100%;
background-color: rgba(var(--r-overlay-element-bg-color), 0.2);
box-shadow: 0 0 0px 1px rgba(var(--r-overlay-element-fg-color), 0.1);
border-radius: var(--r-scrollbar-width);
transition: background-color 0.2s ease;
}
// Hit area
.scrollbar-slide:after {
content: '';
position: absolute;
width: 200%;
height: 100%;
top: 0;
left: -50%;
background: rgba(0, 0, 0, 0);
z-index: -1;
}
.scrollbar-slide:hover,
.scrollbar-slide.active {
background-color: rgba(var(--r-overlay-element-bg-color), 0.4);
}
.scrollbar-trigger {
position: absolute;
width: 100%;
transition: background-color 0.2s ease;
}
.scrollbar-slide.active.has-triggers {
background-color: rgba(var(--r-overlay-element-bg-color), 0.4);
z-index: 10;
}
.scrollbar-slide.active .scrollbar-trigger:after {
content: '';
position: absolute;
width: var(--r-scrollbar-trigger-size);
height: var(--r-scrollbar-trigger-size);
border-radius: 20px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: rgba(var(--r-overlay-element-bg-color), 1);
transition:
transform 0.2s ease,
opacity 0.2s ease;
opacity: 0.4;
}
.scrollbar-slide.active .scrollbar-trigger.active:after,
.scrollbar-slide.active .scrollbar-trigger.active ~ .scrollbar-trigger:after {
opacity: 1;
}
.scrollbar-slide.active .scrollbar-trigger ~ .scrollbar-trigger.active:after {
transform: translate(calc(var(--r-scrollbar-width) * -2), 0);
background-color: rgba(var(--r-overlay-element-bg-color), 1);
}
}
/*********************************************
* PRINT STYLES
*********************************************/
@include meta.load-css('print/pdf.scss');
@include meta.load-css('print/paper.scss');
================================================
FILE: css/theme/README.md
================================================
## Dependencies
Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment installed before proceeding: https://revealjs.com/installation/#full-setup
## Creating a Theme
To create your own theme, start by duplicating a `.scss` file in [css/theme](css/theme). It will be automatically compiled from Sass to CSS when you run `npm run build:styles` (see [vite.config.styles.ts](../../vite.config.styles.ts)).
Each theme file follows the same structure:
1. **Include [/css/theme/template/mixins.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/mixins.scss)**
Shared utility functions.
2. **Include [/css/theme/template/settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss)**
Declares a set of custom CSS variables that the template file (step 4) expects. Each of these variables can be overridden to customize the theme.
3. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)**
The template theme file which will generate final CSS output based on the currently defined variables.
4. **Optionally add custom fonts and/or additional styles**
================================================
FILE: css/theme/beige.scss
================================================
/**
* Beige theme for reveal.js.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #8b743d;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #f7f3de,
$background: radial-gradient(rgba(255, 255, 255, 1), rgba(247, 242, 211, 1)),
$main-font: "'Source Sans Pro', Helvetica, sans-serif",
$main-font-size: 42px,
$main-color: #333,
$heading-color: #333,
$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
$heading-font-weight: 600,
$heading1-text-shadow: #{0 1px 0 #ccc,
0 2px 0 #c9c9c9,
0 3px 0 #bbb,
0 4px 0 #b9b9b9,
0 5px 0 #aaa,
0 6px 1px rgba(0, 0, 0, 0.1),
0 0 5px rgba(0, 0, 0, 0.1),
0 1px 3px rgba(0, 0, 0, 0.3),
0 3px 5px rgba(0, 0, 0, 0.2),
0 5px 10px rgba(0, 0, 0, 0.25),
0 20px 20px rgba(0, 0, 0, 0.15)},
$heading1-size: 2.5em,
$heading2-size: 1.6em,
$heading3-size: 1.3em,
$heading4-size: 1em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 20%),
$selection-color: #333,
$selection-background-color: color.scale($active-color, $lightness: 35%),
$overlay-element-bg-color: '0 0 0',
$overlay-element-fg-color: '240 240 240'
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');
// Change text colors against light slide backgrounds
@include mixins.dark-bg-text-color(#fff);
================================================
FILE: css/theme/black-contrast.scss
================================================
/**
* Black compact & high contrast reveal.js theme, with headers not in capitals.
*
* By Peter Kehl. Based on black.(s)css by Hakim El Hattab, http://hakim.se
*
* - Keep the source similar to black.css - for easy comparison.
* - $mainFontSize controls code blocks, too (although under some ratio).
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #42affa;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #000,
$main-font: "'Source Sans Pro', Helvetica, sans-serif",
$main-font-size: 42px,
$main-color: #fff,
$heading-color: #fff,
$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
$heading-font-weight: 600,
$heading1-size: 2.5em,
$heading2-size: 1.6em,
$heading3-size: 1.3em,
$heading4-size: 1em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 15%),
$selection-color: #fff,
$selection-background-color: color.scale($active-color, $lightness: -35%)
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');
// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#000);
================================================
FILE: css/theme/black.scss
================================================
/**
* Black theme for reveal.js. This is the opposite of the 'white' theme.
*
* By Hakim El Hattab, http://hakim.se
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #42affa;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #191919,
$main-font: "'Source Sans Pro', Helvetica, sans-serif",
$main-font-size: 42px,
$main-color: #fff,
$heading-color: #fff,
$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
$heading-font-weight: 600,
$heading1-size: 2.5em,
$heading2-size: 1.6em,
$heading3-size: 1.3em,
$heading4-size: 1em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 15%),
$selection-color: #fff,
$selection-background-color: color.scale($active-color, $lightness: -35%)
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');
// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);
================================================
FILE: css/theme/blood.scss
================================================
/**
* Blood theme for reveal.js
* Author: Walther http://github.com/Walther
*
* Designed to be used with highlight.js theme
* "monokai_sublime.css" available from
* https://github.com/isagalaev/highlight.js/
*
* For other themes, change $codeBackground accordingly.
*
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$coal: #222;
$active-color: #a23;
$code-background-color: #23241f;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: $coal,
$main-font: 'Ubuntu, sans-serif',
$main-color: #eee,
$heading-font: 'Ubuntu, sans-serif',
$heading-text-shadow: 2px 2px 2px $coal,
$heading1-text-shadow: #{0 1px 0 #ccc,
0 2px 0 #c9c9c9,
0 3px 0 #bbb,
0 4px 0 #b9b9b9,
0 5px 0 #aaa,
0 6px 1px rgba(0, 0, 0, 0.1),
0 0 5px rgba(0, 0, 0, 0.1),
0 1px 3px rgba(0, 0, 0, 0.3),
0 3px 5px rgba(0, 0, 0, 0.2),
0 5px 10px rgba(0, 0, 0, 0.25),
0 20px 20px rgba(0, 0, 0, 0.15)},
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 20%),
$selection-background-color: $active-color,
$selection-color: #fff
);
// Inject the theme template
@use 'template/theme';
// Fonts
@import url('https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic');
// Invert text color when the background is light
@include mixins.light-bg-text-color(#222);
.reveal p {
font-weight: 300;
text-shadow: 1px 1px $coal;
}
section.has-light-background {
p,
h1,
h2,
h3,
h4 {
text-shadow: none;
}
}
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
font-weight: 700;
}
.reveal p code {
background-color: $code-background-color;
display: inline-block;
border-radius: 7px;
}
.reveal small code {
vertical-align: baseline;
}
================================================
FILE: css/theme/dracula.scss
================================================
/**
* Dracula Dark theme for reveal.js.
* Based on https://draculatheme.com
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
// Include theme-specific fonts
$systemFontsSansSerif: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui,
helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif;
$systemFontsMono: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace;
$background: #282a36;
$foreground: #f8f8f2;
$selection: #44475a;
$comment: #6272a4;
$red: #ff5555;
$orange: #ffb86c;
$yellow: #f1fa8c;
$green: #50fa7b;
$purple: #bd93f9;
$cyan: #8be9fd;
$pink: #ff79c6;
$mainFont: $systemFontsSansSerif;
$codeFont: 'Fira Code', $systemFontsMono;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #191919,
$main-font: $mainFont,
$main-font-size: 42px,
$main-color: $foreground,
$code-font: $codeFont,
$heading-color: $purple,
$heading-font: $mainFont,
$heading-font-weight: 600,
$heading-text-transform: none,
$heading1-size: 2.5em,
$heading2-size: 1.6em,
$heading3-size: 1.3em,
$heading4-size: 1em,
$link-color: $pink,
$link-color-hover: $cyan,
$selection-color: #fff,
$selection-background-color: $selection
);
// Inject the theme template
@use 'template/theme';
// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color($background);
// Define additional color effects based on Dracula spec
// https://spec.draculatheme.com/
:root {
--r-bold-color: #{$orange};
--r-italic-color: #{$yellow};
--r-inline-code-color: #{$green};
--r-list-bullet-color: #{$cyan};
}
/**
* Dracula colors by Zeno Rocha
* https://draculatheme.com/contribute
*/
.reveal {
strong,
b {
color: var(--r-bold-color);
}
em,
i,
blockquote {
color: var(--r-italic-color);
}
code {
color: var(--r-inline-code-color);
}
// Dracula colored list bullets and numbers
ul,
ol {
li::marker {
color: var(--r-list-bullet-color);
}
}
}
================================================
FILE: css/theme/fonts/league-gothic/LICENSE
================================================
SIL Open Font License (OFL)
http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
================================================
FILE: css/theme/fonts/league-gothic/league-gothic.css
================================================
@font-face {
font-family: 'League Gothic';
src: url('./league-gothic.woff') format('woff');
font-weight: normal;
font-style: normal;
}
================================================
FILE: css/theme/fonts/source-sans-pro/LICENSE
================================================
SIL Open Font License
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
—————————————————————————————-
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
—————————————————————————————-
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
“Reserved Font Name” refers to any names specified as such after the copyright statement(s).
“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).
“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
================================================
FILE: css/theme/fonts/source-sans-pro/source-sans-pro.css
================================================
@font-face {
font-family: 'Source Sans Pro';
src: url('./source-sans-pro-regular.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Source Sans Pro';
src: url('./source-sans-pro-italic.woff') format('woff');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Source Sans Pro';
src: url('./source-sans-pro-semibold.woff') format('woff');
font-weight: 600;
font-style: normal;
}
@font-face {
font-family: 'Source Sans Pro';
src: url('./source-sans-pro-semibolditalic.woff') format('woff');
font-weight: 600;
font-style: italic;
}
================================================
FILE: css/theme/league.scss
================================================
/**
* League theme for reveal.js.
*
* This was the default theme pre-3.0.0.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background: radial-gradient(rgba(85, 90, 95, 1), rgba(28, 30, 32, 1)),
$background-color: rgba(28, 30, 32, 1),
$heading-text-shadow: #{0px 0px 6px rgba(0, 0, 0, 0.2)},
$heading1-text-shadow: #{0 1px 0 #ccc,
0 2px 0 #c9c9c9,
0 3px 0 #bbb,
0 4px 0 #b9b9b9,
0 5px 0 #aaa,
0 6px 1px rgba(0, 0, 0, 0.1),
0 0 5px rgba(0, 0, 0, 0.1),
0 1px 3px rgba(0, 0, 0, 0.3),
0 3px 5px rgba(0, 0, 0, 0.2),
0 5px 10px rgba(0, 0, 0, 0.25),
0 20px 20px rgba(0, 0, 0, 0.15)}
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');
// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);
================================================
FILE: css/theme/moon.scss
================================================
/**
* Solarized Dark theme for reveal.js.
* Author: Achim Staebler
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
// Solarized colors by Ethan Schoonover
$base03: #002b36;
$base02: #073642;
$base01: #586e75;
$base00: #657b83;
$base0: #839496;
$base1: #93a1a1;
$base2: #eee8d5;
$base3: #fdf6e3;
$yellow: #b58900;
$orange: #cb4b16;
$red: #dc322f;
$magenta: #d33682;
$violet: #6c71c4;
$blue: #268bd2;
$cyan: #2aa198;
$green: #859900;
$active-color: $blue;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: $base03,
$main-color: $base1,
$heading-color: $base2,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 20%),
$selection-color: #fff,
$selection-background-color: $magenta
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');
// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);
================================================
FILE: css/theme/night.scss
================================================
/**
* Black theme for reveal.js.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #e7ad52;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #111,
$main-font: "'Open Sans', sans-serif",
$main-color: #fff,
$heading-color: #fff,
$heading-font: "'Montserrat', Impact, sans-serif",
$heading-text-transform: none,
$heading-letter-spacing: -0.03em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 20%),
$selection-color: #111,
$selection-background-color: $active-color
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('https://fonts.googleapis.com/css?family=Montserrat:700');
@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic');
// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);
================================================
FILE: css/theme/serif.scss
================================================
/**
* A simple theme for reveal.js presentations, similar
* to the default theme. The accent color is brown.
*
* This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #51483d;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #f0f1eb,
$main-font: "'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif",
$main-font-size: 42px,
$main-color: #000,
$heading-color: #383d3d,
$heading-font: "'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif",
$heading-font-weight: 600,
$heading-text-transform: none,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 25%),
$selection-color: #fff,
$selection-background-color: $active-color,
$overlay-element-bg-color: '0 0 0',
$overlay-element-fg-color: '240 240 240'
);
// Inject the theme template
@use 'template/theme';
// Change text colors against light slide backgrounds
@include mixins.dark-bg-text-color(#fff);
.reveal a {
line-height: 1.3em;
}
================================================
FILE: css/theme/simple.scss
================================================
/**
* A simple theme for reveal.js presentations, similar
* to the default theme. The accent color is darkblue.
*
* This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
* reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #00008b;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #fff,
$main-color: #000,
$main-font: "'Lato', sans-serif",
$heading-color: #000,
$heading-font: "'News Cycle', Impact, sans-serif",
$heading-font-weight: 600,
$heading1-size: 2.5em,
$heading2-size: 1.6em,
$heading3-size: 1.3em,
$heading4-size: 1em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 20%),
$selection-color: #fff,
$selection-background-color: $active-color,
$overlay-element-bg-color: '0, 0, 0',
$overlay-element-fg-color: '240, 240, 240'
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('https://fonts.googleapis.com/css?family=News+Cycle:400,700');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');
// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);
================================================
FILE: css/theme/sky.scss
================================================
/**
* Sky theme for reveal.js.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #2a76dd;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background: radial-gradient(#f7fbfc, #add9e4),
$background-color: #f7fbfc,
$main-color: #333,
$main-font: "'Open Sans', sans-serif",
$heading-color: #333,
$heading-font: "'Quicksand', sans-serif",
$heading-letter-spacing: -0.05em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 15%),
$selection-color: #fff,
$selection-background-color: $active-color,
$overlay-element-bg-color: '0 0 0',
$overlay-element-fg-color: '240 240 240'
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic');
@import url('https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700');
// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);
.reveal a {
line-height: 1.3em;
}
================================================
FILE: css/theme/solarized.scss
================================================
/**
* Solarized Light theme for reveal.js.
* Author: Achim Staebler
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
// Solarized colors by Ethan Schoonover
$base03: #002b36;
$base02: #073642;
$base01: #586e75;
$base00: #657b83;
$base0: #839496;
$base1: #93a1a1;
$base2: #eee8d5;
$base3: #fdf6e3;
$yellow: #b58900;
$orange: #cb4b16;
$red: #dc322f;
$magenta: #d33682;
$violet: #6c71c4;
$blue: #268bd2;
$cyan: #2aa198;
$green: #859900;
$active-color: $blue;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: $base3,
$main-color: $base00,
$heading-color: $base01,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 20%),
$selection-color: #fff,
$selection-background-color: $magenta,
$overlay-element-bg-color: '0 0 0',
$overlay-element-fg-color: '240 240 240'
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');
// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);
================================================
FILE: css/theme/template/mixins.scss
================================================
@mixin light-bg-text-color($color) {
section.has-light-background {
&,
h1,
h2,
h3,
h4,
h5,
h6 {
color: $color;
}
}
}
@mixin dark-bg-text-color($color) {
section.has-dark-background {
&,
h1,
h2,
h3,
h4,
h5,
h6 {
color: $color;
}
}
}
================================================
FILE: css/theme/template/settings.scss
================================================
// Base settings for all themes that can optionally be
// overridden by the super-theme
@use 'sass:color';
@use 'sass:meta';
// Background of the presentation
$background: #2b2b2b !default;
$background-color: #bbb !default;
// Primary/body text
$main-font: 'Lato', sans-serif !default;
$main-font-size: 40px !default;
$main-color: #eee !default;
// Vertical spacing between blocks of text
$block-margin: 20px !default;
// Headings
$heading-margin: 0 0 20px 0 !default;
$heading-font: 'League Gothic', Impact, sans-serif !default;
$heading-color: #eee !default;
$heading-line-height: 1.2 !default;
$heading-letter-spacing: normal !default;
$heading-text-transform: uppercase !default;
$heading-text-shadow: none !default;
$heading-font-weight: normal !default;
$heading1-text-shadow: none !default;
$heading1-size: 3.77em !default;
$heading2-size: 2.11em !default;
$heading3-size: 1.55em !default;
$heading4-size: 1em !default;
$code-font: monospace !default;
// Links and actions
$link-color: #13daec !default;
$link-color-dark: color.scale($link-color, $lightness: -15%) !default;
$link-color-hover: color.scale($link-color, $lightness: 20%) !default;
// Text selection
$selection-background-color: #0fadbb !default;
$selection-color: #fff !default;
// Colors used for UI elements that are overlaid on top of
// the presentation
$overlay-element-bg-color: 240, 240, 240 !default;
$overlay-element-fg-color: 0, 0, 0 !default;
// Expose all SCSS variables as CSS custom properties
:root {
// Background of the presentation
--r-background: #{$background};
--r-background-color: #{$background-color};
// Primary/body text
--r-main-font: #{$main-font};
--r-main-font-size: #{$main-font-size};
--r-main-color: #{$main-color};
// Vertical spacing between blocks of text
--r-block-margin: #{$block-margin};
// Headings
--r-heading-margin: #{$heading-margin};
--r-heading-font: #{$heading-font};
--r-heading-color: #{$heading-color};
--r-heading-line-height: #{$heading-line-height};
--r-heading-letter-spacing: #{$heading-letter-spacing};
--r-heading-text-transform: #{$heading-text-transform};
--r-heading-text-shadow: #{$heading-text-shadow};
--r-heading-font-weight: #{$heading-font-weight};
--r-heading1-text-shadow: #{$heading1-text-shadow};
--r-heading1-size: #{$heading1-size};
--r-heading2-size: #{$heading2-size};
--r-heading3-size: #{$heading3-size};
--r-heading4-size: #{$heading4-size};
--r-code-font: #{$code-font};
// Links and actions
--r-link-color: #{$link-color};
--r-link-color-dark: #{$link-color-dark};
--r-link-color-hover: #{$link-color-hover};
// Text selection
--r-selection-background-color: #{$selection-background-color};
--r-selection-color: #{$selection-color};
// Colors used for UI elements that are overlaid on top of
// the presentation
--r-overlay-element-bg-color: #{$overlay-element-bg-color};
--r-overlay-element-fg-color: #{$overlay-element-fg-color};
}
================================================
FILE: css/theme/template/theme.scss
================================================
// Base theme template for reveal.js
/*********************************************
* GLOBAL STYLES
*********************************************/
.reveal-viewport {
background: var(--r-background);
background-color: var(--r-background-color);
}
.reveal {
font-family: var(--r-main-font);
font-size: var(--r-main-font-size);
font-weight: normal;
color: var(--r-main-color);
}
.reveal ::selection {
color: var(--r-selection-color);
background: var(--r-selection-background-color);
text-shadow: none;
}
.reveal ::-moz-selection {
color: var(--r-selection-color);
background: var(--r-selection-background-color);
text-shadow: none;
}
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit;
}
/*********************************************
* HEADERS
*********************************************/
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: var(--r-heading-margin);
color: var(--r-heading-color);
font-family: var(--r-heading-font);
font-weight: var(--r-heading-font-weight);
line-height: var(--r-heading-line-height);
letter-spacing: var(--r-heading-letter-spacing);
text-transform: var(--r-heading-text-transform);
text-shadow: var(--r-heading-text-shadow);
word-wrap: break-word;
}
.reveal h1 {
font-size: var(--r-heading1-size);
}
.reveal h2 {
font-size: var(--r-heading2-size);
}
.reveal h3 {
font-size: var(--r-heading3-size);
}
.reveal h4 {
font-size: var(--r-heading4-size);
}
.reveal h1 {
text-shadow: var(--r-heading1-text-shadow);
}
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: var(--r-block-margin) 0;
line-height: 1.3;
}
/* Remove trailing margins after titles */
.reveal h1:last-child,
.reveal h2:last-child,
.reveal h3:last-child,
.reveal h4:last-child,
.reveal h5:last-child,
.reveal h6:last-child {
margin-bottom: 0;
}
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%;
}
.reveal strong,
.reveal b {
font-weight: bold;
}
.reveal em {
font-style: italic;
}
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em;
}
.reveal ol {
list-style-type: decimal;
}
.reveal ul {
list-style-type: disc;
}
.reveal ul ul {
list-style-type: square;
}
.reveal ul ul ul {
list-style-type: circle;
}
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px;
}
.reveal dt {
font-weight: bold;
}
.reveal dd {
margin-left: 40px;
}
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: var(--r-block-margin) auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);
}
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block;
}
.reveal q {
font-style: italic;
}
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: var(--r-block-margin) auto;
text-align: left;
font-size: 0.55em;
font-family: var(--r-code-font);
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15);
}
.reveal code {
font-family: var(--r-code-font);
text-transform: none;
tab-size: 2;
}
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
}
.reveal .code-wrapper {
white-space: normal;
}
.reveal .code-wrapper code {
white-space: pre;
}
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0;
}
.reveal table th {
font-weight: bold;
}
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid;
}
.reveal table th[align='center'],
.reveal table td[align='center'] {
text-align: center;
}
.reveal table th[align='right'],
.reveal table td[align='right'] {
text-align: right;
}
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none;
}
.reveal sup {
vertical-align: super;
font-size: smaller;
}
.reveal sub {
vertical-align: sub;
font-size: smaller;
}
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top;
}
.reveal small * {
vertical-align: top;
}
.reveal img {
margin: var(--r-block-margin) 0;
}
/*********************************************
* LINKS
*********************************************/
.reveal a {
color: var(--r-link-color);
text-decoration: none;
transition: color 0.15s ease;
}
.reveal a:hover {
color: var(--r-link-color-hover);
text-shadow: none;
border: none;
}
.reveal .roll span:after {
color: #fff;
// background: darken( var(--r-link-color), 15% );
background: var(--r-link-color-dark);
}
/*********************************************
* Frame helper
*********************************************/
.reveal .r-frame {
border: 4px solid var(--r-main-color);
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
}
.reveal a .r-frame {
transition: all 0.15s linear;
}
.reveal a:hover .r-frame {
border-color: var(--r-link-color);
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
}
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls {
color: var(--r-link-color);
}
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2);
color: var(--r-link-color);
}
/*********************************************
* PRINT BACKGROUND
*********************************************/
@media print {
.backgrounds {
background-color: var(--r-background-color);
}
}
================================================
FILE: css/theme/white-contrast.scss
================================================
/**
* White compact & high contrast reveal.js theme, with headers not in capitals.
*
* By Peter Kehl. Based on white.(s)css by Hakim El Hattab, http://hakim.se
*
* - Keep the source similar to black.css - for easy comparison.
* - $mainFontSize controls code blocks, too (although under some ratio).
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #2a76dd;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #fff,
$main-font: "'Source Sans Pro', Helvetica, sans-serif",
$main-font-size: 42px,
$main-color: #000,
$heading-color: #000,
$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
$heading-font-weight: 600,
$heading1-size: 2.5em,
$heading2-size: 1.6em,
$heading3-size: 1.3em,
$heading4-size: 1em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 15%),
$selection-color: #fff,
$selection-background-color: $active-color,
$overlay-element-bg-color: '0, 0, 0',
$overlay-element-fg-color: '240, 240, 240'
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');
// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);
================================================
FILE: css/theme/white.scss
================================================
/**
* White theme for reveal.js. This is the opposite of the 'black' theme.
*
* By Hakim El Hattab, http://hakim.se
*/
// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;
$active-color: #2a76dd;
// Inject theme variables (with some overrides)
@use 'template/settings' with (
$background-color: #fff,
$main-color: #222,
$main-font: "'Source Sans Pro', Helvetica, sans-serif",
$main-font-size: 42px,
$heading-color: #222,
$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
$heading-font-weight: 600,
$heading1-size: 2.5em,
$heading2-size: 1.6em,
$heading3-size: 1.3em,
$heading4-size: 1em,
$link-color: $active-color,
$link-color-hover: color.scale($active-color, $lightness: 15%),
$selection-color: #fff,
$selection-background-color: $active-color,
$overlay-element-bg-color: '0 0 0',
$overlay-element-fg-color: '240 240 240'
);
// Inject the theme template
@use 'template/theme';
// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');
// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);
================================================
FILE: demo.html
================================================
reveal.js – The HTML Presentation Framework
Hello There
reveal.js enables you to create beautiful interactive slide decks using HTML. This
presentation will show you examples of what it can do.
Vertical Slides
Slides can be nested inside of each other.
Use the Space key to navigate through all slides.
Basement Level 1
Nested slides are useful for adding additional detail underneath a high level
horizontal slide.
Basement Level 2
That's it, time to go back up.
Slides
Not a coder? Not a problem. There's a fully-featured visual editor for authoring these,
try it out at https://slides.com .
Hidden Slides
This slide is visible in the source, but hidden when the presentation is viewed. You can
show all hidden slides by setting the `showHiddenSlides` config option to `true`.
Pretty Code
import { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
...
);
}
Code syntax highlighting courtesy of
highlight.js .
Point of View
Press ESC to enter the slide overview.
Hold down the alt key (ctrl in Linux) and click on any
element to zoom towards it using zoom.js .
Click again to zoom back out.
(NOTE: Use ctrl + click in Linux.)
Auto-Animate
Automatically animate matching elements across slides with
Auto-Animate .
Touch Optimized
Presentations look great on touch devices, like mobile phones and tablets. Simply swipe
through your slides.
Lightbox
Turn any element into a lightbox using data‑preview‑image & data‑preview‑video .
<img src="image.png" data-preview-image="image.png">
<img src="video.png" data-preview-video="video.mp4">
Add the r-fit-text class to auto-size text
FIT TEXT
Fragments
Hit the next arrow...
... to step through ...
... a fragmented
slide.
This slide has fragments which are also stepped through in the notes window.
Fragment Styles
There's different types of fragments, like:
grow
shrink
fade-out
fade-right,
up,
down,
left
fade-in-then-out
fade-in-then-semi-out
Highlight red
blue
green
Slide Backgrounds
Set data-background="#dddddd" on a slide to change the background color.
All CSS color formats are supported.
Gradient Backgrounds
<section data-background-gradient=
"linear-gradient(to bottom, #ddd, #191919)">
Image Backgrounds
<section data-background="image.png">
Tiled Backgrounds
<section data-background="image.png" data-background-repeat="repeat" data-background-size="100px">
Video Backgrounds
<section data-background-video="video.mp4,video.webm">
Background Transitions
Different background transitions are available via the backgroundTransition option. This
one's called "zoom".
Reveal.configure({ backgroundTransition: 'zoom' })
Background Transitions
You can override background transitions per-slide.
<section data-background-transition="zoom">
Iframe Backgrounds
Since reveal.js runs on the web, you can easily embed other web content. Try
interacting with the page in the background.
Marvelous List
No order here
Or here
Or here
Or here
Fantastic Ordered List
One is smaller than...
Two is smaller than...
Three!
Tabular Tables
Item
Value
Quantity
Apples
$1
7
Lemonade
$2
18
Bread
$3
2
Clever Quotes
These guys come in two forms, inline:
The nice thing about standards is that there are so many to choose from
and block:
“For years there has been a theory that millions of monkeys typing at random on
millions of typewriters would reproduce the entire works of Shakespeare. The Internet
has proven this theory to be untrue.”
Intergalactic Interconnections
You can link between slides internally,
like this .
Speaker View
There's a speaker view . It includes a
timer, preview of the upcoming slide as well as your speaker notes.
Press the S key to try it out.
Oh hey, these are some notes. They'll be hidden in your presentation, but you can see
them if you open the speaker notes window (hit 's' on your keyboard).
Global State
Set data-state="something" on a slide and "something"
will be added as a class to the document element when the slide is open. This lets you
apply broader style changes, like switching the page background.
State Events
Additionally custom events can be triggered on a per slide basis by binding to the
data-state name.
Reveal.on( 'customevent', function() {
console.log( '"customevent" has fired' );
} );
Take a Moment
Press B or . on your keyboard to pause the presentation. This is helpful when you're on
stage and want to take distracting slides off the screen.
================================================
FILE: dist/config.d.ts
================================================
/**
* Slide transition styles.
*
* @see {@link https://revealjs.com/transitions/}
*/
type TransitionStyle = 'none' | 'fade' | 'slide' | 'convex' | 'concave' | 'zoom';
/**
* Slide transition speeds.
*
* @see {@link https://revealjs.com/transitions/}
*/
type TransitionSpeed = 'default' | 'fast' | 'slow';
/**
* Fragment animation classes.
*
* @see {@link https://revealjs.com/fragments/}
*/
type FragmentAnimation = 'fade-out' | 'fade-up' | 'fade-down' | 'fade-left' | 'fade-right' | 'fade-in-then-out' | 'fade-in-then-semi-out' | 'grow' | 'shrink' | 'strike' | 'highlight-red' | 'highlight-blue' | 'highlight-green' | 'highlight-current-red' | 'highlight-current-blue' | 'highlight-current-green' | (string & {});
/**
* katex - Math Plugin configuration
*
* @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
* @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/katex.js}
*/
interface KatexConfig {
local?: string;
version?: string;
delimiters?: Array<{
left: string;
right: string;
display: boolean;
}>;
ignoredTags?: string[];
}
/**
* mathjax2 - Math Plugin configuration
*
* @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
* @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/mathjax2.js}
*/
interface Mathjax2Config {
mathjax?: string;
config?: string;
tex2jax?: {
inlineMath?: any;
skipTags?: string[];
};
}
/**
* mathjax3 - Math Plugin configuration
*
* @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
* @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/mathjax3.js}
*/
interface Mathjax3Config {
mathjax?: string;
tex?: {
inlineMath?: any;
};
options?: {
skipHtmlTags: string[];
};
}
/**
* mathjax4 - Math Plugin configuration
*
* @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
* @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/mathjax4.js}
*/
interface Mathjax4Config {
mathjax?: string;
tex?: {
inlineMath?: Array<[string, string]>;
displayMath?: Array<[string, string]>;
macros?: Record;
};
options?: {
skipHtmlTags?: string[];
};
startup?: {
ready?: () => void;
};
output?: {
font?: string;
displayOverflow?: string;
linebreaks?: {
inline?: boolean;
width?: string;
lineleading?: number;
LinebreakVisitor?: unknown;
};
};
}
/**
* Highlight Plugin configuration
*
* @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/highlight/plugin.js}
*/
interface HighlightConfig {
highlightOnLoad?: boolean;
escapeHTML?: boolean;
beforeHighlight?: (...args: any) => any;
}
/**
* Markdown Plugin configuration
*
* @see {@link https://github.com/reveal/revealjs.com/blob/master/src/markdown.md}
* @see {@link https://marked.js.org/using_advanced}
*/
interface MarkdownConfig {
async?: boolean;
baseUrl?: string;
breaks?: boolean;
gfm?: boolean;
headerIds?: boolean;
headerPrefix?: string;
highlight?: (...args: any) => any;
langPrefix?: string;
mangle?: boolean;
pedantic?: boolean;
renderer?: object;
sanitize?: boolean;
sanitizer?: (...args: any) => any;
silent?: boolean;
smartLists?: boolean;
smartypants?: boolean;
tokenizer?: object;
walkTokens?: (...args: any) => any;
xhtml?: boolean;
separator?: string;
verticalSeparator?: string;
notesSeparator?: string;
attributes?: string;
}
/**
* Configuration object for reveal.js.
*
* @see {@link https://revealjs.com/config/}
*/
interface RevealConfig {
/**
* The "normal" size of the presentation, aspect ratio will be preserved
* when the presentation is scaled to fit different resolutions
*
* @see {@link https://revealjs.com/presentation-size/}
*
* @defaultValue 960
*/
width?: number | string;
/**
* The "normal" size of the presentation, aspect ratio will be preserved
* when the presentation is scaled to fit different resolutions
*
* @see {@link https://revealjs.com/presentation-size/}
*
* @defaultValue 700
*/
height?: number | string;
/**
* Factor of the display size that should remain empty around the content
*
* @see {@link https://revealjs.com/presentation-size/}
*
* @defaultValue 0.04
*/
margin?: number;
/**
* The smallest possible factor to scale content down by in order to fit
* the available viewport.
*
* @see {@link https://revealjs.com/presentation-size/}
*
* @defaultValue 0.2
*/
minScale?: number;
/**
* The largest possible factor to scale content up by in order to cover
* the available viewport.
*
* @see {@link https://revealjs.com/presentation-size/}
*
* @defaultValue 2.0
*/
maxScale?: number;
/**
* Display presentation control arrows
* - true: Display controls in all views
* - false: Hide controls in all views
* - 'speaker': Display controls only in the speaker view
*
* @defaultValue true
*/
controls?: boolean | 'speaker' | 'speaker-only';
/**
* Help the user learn the controls by providing hints, for example by
* bouncing the down arrow when they first encounter a vertical slide
*
* @defaultValue true
*/
controlsTutorial?: boolean;
/**
* Determines where controls appear, "edges" or "bottom-right"
*
* @defaultValue 'bottom-right'
*/
controlsLayout?: 'edges' | 'bottom-right';
/**
* Visibility rule for backwards navigation arrows; "faded", "hidden"
* or "visible"
*
* @defaultValue 'faded'
*/
controlsBackArrows?: 'faded' | 'hidden' | 'visible';
/**
* Display a presentation progress bar
*
* @defaultValue true
*/
progress?: boolean;
/**
* Display the page number of the current slide
* - true: Show slide number
* - false: Hide slide number
*
* Can optionally be set as a string that specifies the number formatting:
* - "h.v": Horizontal . vertical slide number (default)
* - "h/v": Horizontal / vertical slide number
* - "c": Flattened slide number
* - "c/t": Flattened slide number / total slides
*
* Alternatively, you can provide a function that returns the slide
* number for the current slide. The function should take in a slide
* object and return an array with one string [slideNumber] or
* three strings [n1,delimiter,n2]. See #formatSlideNumber().
*
* @defaultValue false
*/
slideNumber?: boolean | 'h.v' | 'h/v' | 'c' | 'c/t' | ((slide: any) => string | [string, string, string]);
/**
* Can be used to limit the contexts in which the slide number appears
* - "all": Always show the slide number
* - "print": Only when printing to PDF
* - "speaker": Only in the speaker view
*
* @defaultValue 'all'
*/
showSlideNumber?: 'all' | 'print' | 'speaker';
/**
* Use 1 based indexing for # links to match slide number (default is zero
* based)
*
* @defaultValue false
*/
hashOneBasedIndex?: boolean;
/**
* Add the current slide number to the URL hash so that reloading the
* page/copying the URL will return you to the same slide
*
* @defaultValue false
*/
hash?: boolean;
/**
* Flags if we should monitor the hash and change slides accordingly
*
* @defaultValue true
*/
respondToHashChanges?: boolean;
/**
* Enable support for jump-to-slide navigation shortcuts
*
* @defaultValue true
*/
jumpToSlide?: boolean;
/**
* Push each slide change to the browser history. Implies `hash: true`
*
* @defaultValue false
*/
history?: boolean;
/**
* Enable keyboard shortcuts for navigation
*
* @defaultValue true
*/
keyboard?: boolean | {
[keyCode: number]: string | ((event: KeyboardEvent) => void);
};
/**
* Optional function that blocks keyboard events when returning false
*
* If you set this to 'focused', we will only capture keyboard events
* for embedded decks when they are in focus
*
* @defaultValue null
*/
keyboardCondition?: null | 'focused' | ((event: KeyboardEvent) => boolean);
/**
* Disables the default reveal.js slide layout (scaling and centering)
* so that you can use custom CSS layout
*
* @defaultValue false
*/
disableLayout?: boolean;
/**
* Enable the slide overview mode
*
* @see {@link https://revealjs.com/overview/}
*
* @defaultValue true
*/
overview?: boolean;
/**
* Vertical centering of slides
*
* @defaultValue true
*/
center?: boolean;
/**
* Enables touch navigation on devices with touch input
*
* @defaultValue true
*/
touch?: boolean;
/**
* Loop the presentation
*
* @defaultValue false
*/
loop?: boolean;
/**
* Change the presentation direction to be RTL
*
* @defaultValue false
*/
rtl?: boolean;
/**
* Changes the behavior of our navigation directions.
*
* "default"
* Left/right arrow keys step between horizontal slides, up/down
* arrow keys step between vertical slides. Space key steps through
* all slides (both horizontal and vertical).
*
* "linear"
* Removes the up/down arrows. Left/right arrows step through all
* slides (both horizontal and vertical).
*
* "grid"
* When this is enabled, stepping left/right from a vertical stack
* to an adjacent vertical stack will land you at the same vertical
* index.
*
* Consider a deck with six slides ordered in two vertical stacks:
* 1.1 2.1
* 1.2 2.2
* 1.3 2.3
*
* If you're on slide 1.3 and navigate right, you will normally move
* from 1.3 -> 2.1. If "grid" is used, the same navigation takes you
* from 1.3 -> 2.3.
*
* @defaultValue 'default'
*/
navigationMode?: 'default' | 'linear' | 'grid';
/**
* Randomizes the order of slides each time the presentation loads
*
* @defaultValue false
*/
shuffle?: boolean;
/**
* Turns fragments on and off globally
*
* @see {@link https://revealjs.com/fragments/}
*
* @defaultValue true
*/
fragments?: boolean;
/**
* Flags whether to include the current fragment in the URL,
* so that reloading brings you to the same fragment position
*
* @defaultValue true
*/
fragmentInURL?: boolean;
/**
* Flags if the presentation is running in an embedded mode,
* i.e. contained within a limited portion of the screen
*
* @defaultValue false
*/
embedded?: boolean;
/**
* Flags if we should show a help overlay when the question-mark
* key is pressed
*
* @defaultValue true
*/
help?: boolean;
/**
* Flags if it should be possible to pause the presentation (blackout)
*
* @defaultValue true
*/
pause?: boolean;
/**
* Flags if speaker notes should be visible to all viewers
*
* @defaultValue false
*/
showNotes?: boolean;
/**
* Flags if slides with data-visibility="hidden" should be kept visible
*
* @defaultValue false
*/
showHiddenSlides?: boolean;
/**
* Global override for autoplaying embedded media (video/audio/iframe)
* - null: Media will only autoplay if data-autoplay is present
* - true: All media will autoplay, regardless of individual setting
* - false: No media will autoplay, regardless of individual setting
*
* @defaultValue null
*/
autoPlayMedia?: null | boolean;
/**
* Global override for preloading lazy-loaded iframes
* - null: Iframes with data-src AND data-preload will be loaded when within
* the viewDistance, iframes with only data-src will be loaded when visible
* - true: All iframes with data-src will be loaded when within the viewDistance
* - false: All iframes with data-src will be loaded only when visible
*
* @defaultValue null
*/
preloadIframes?: null | boolean;
/**
* Prevent embedded iframes from automatically focusing on themselves
*
* @defaultValue false
*/
preventIframeAutoFocus?: boolean;
/**
* Can be used to globally disable auto-animation
*
* @see {@link https://revealjs.com/auto-animate/}
*
* @defaultValue true
*/
autoAnimate?: boolean;
/**
* Optionally provide a custom element matcher that will be
* used to dictate which elements we can animate between.
*
* @defaultValue null
*/
autoAnimateMatcher?: null | Function;
/**
* Default settings for our auto-animate transitions, can be
* overridden per-slide or per-element via data arguments
*
* @defaultValue 'ease'
*/
autoAnimateEasing?: 'ease' | string;
/**
* Number of seconds to animate each element.
*
* @defaultValue 1.0
*/
autoAnimateDuration?: number;
/**
* Should unmatched elements be faded in?
*
* @defaultValue true
*/
autoAnimateUnmatched?: boolean;
/**
* CSS properties that can be auto-animated. Position & scale
* is matched separately so there's no need to include styles
* like top/right/bottom/left, width/height or margin.
*
* @defaultValue ['opacity', 'color', 'background-color', 'padding', 'font-size', 'line-height', 'letter-spacing', 'border-width', 'border-color', 'border-radius', 'outline', 'outline-offset']
*/
autoAnimateStyles?: string[];
/**
* Controls automatic progression to the next slide
* - 0: Auto-sliding only happens if the data-autoslide HTML attribute
* is present on the current slide or fragment
* - 1+: All slides will progress automatically at the given interval
* - false: No auto-sliding, even if data-autoslide is present
*
* @defaultValue 0
*/
autoSlide?: number | false;
/**
* Stop auto-sliding after user input
*
* @defaultValue true
*/
autoSlideStoppable?: boolean;
/**
* Use this method for navigation when auto-sliding (defaults to navigateNext)
*
* @defaultValue null
*/
autoSlideMethod?: null | Function;
/**
* Specify the average time in seconds that you think you will spend
* presenting each slide. This is used to show a pacing timer in the
* speaker view
*
* @defaultValue null
*/
defaultTiming?: null;
/**
* Enable slide navigation via mouse wheel
*
* @defaultValue false
*/
mouseWheel?: boolean;
/**
* Opens links in an iframe preview overlay
* Add `data-preview-link` and `data-preview-link="false"` to customize each link
* individually
*
* @defaultValue false
*/
previewLinks?: boolean;
/**
* Exposes the reveal.js API through window.postMessage
*
* @defaultValue true
*/
postMessage?: boolean;
/**
* Dispatches all reveal.js events to the parent window through postMessage
*
* @defaultValue false
*/
postMessageEvents?: boolean;
/**
* Focuses body when page changes visibility to ensure keyboard shortcuts work
*
* @defaultValue true
*/
focusBodyOnPageVisibilityChange?: boolean;
/**
* Transition style
*
* @see {@link https://revealjs.com/transitions/}
*
* @defaultValue 'slide'
*/
transition?: TransitionStyle;
/**
* Transition speed
*
* @defaultValue 'default'
*/
transitionSpeed?: TransitionSpeed;
/**
* Transition style for full page slide backgrounds
*
* @defaultValue 'fade'
*/
backgroundTransition?: TransitionStyle;
/**
* Parallax background image
*
* @defaultValue ''
*/
parallaxBackgroundImage?: null | string;
/**
* Parallax background size
*
* @defaultValue ''
*/
parallaxBackgroundSize?: null | string;
/**
* Parallax background repeat
*
* @defaultValue ''
*/
parallaxBackgroundRepeat?: null | string;
/**
* Parallax background position
*
* @defaultValue ''
*/
parallaxBackgroundPosition?: null | string;
/**
* Amount of pixels to move the parallax background per slide step
*
* @defaultValue null
*/
parallaxBackgroundHorizontal?: null | number;
/**
*
* @defaultValue null
*/
parallaxBackgroundVertical?: null | number;
/**
* Can be used to initialize reveal.js in one of the following views:
* - print: Render the presentation so that it can be printed to PDF
* - scroll: Show the presentation as a tall scrollable page with scroll
* triggered animations
*
* @see {@link https://revealjs.com/scroll-view/}
*
* @defaultValue null
*/
view?: null | 'print' | 'scroll';
/**
* Adjusts the height of each slide in the scroll view.
* - full: Each slide is as tall as the viewport
* - compact: Slides are as small as possible, allowing multiple slides
* to be visible in parallel on tall devices
*
* @defaultValue 'full'
*/
scrollLayout?: 'full' | 'compact';
/**
* Control how scroll snapping works in the scroll view.
* - false: No snapping, scrolling is continuous
* - proximity: Snap when close to a slide
* - mandatory: Always snap to the closest slide
*
* Only applies to presentations in scroll view.
*
* @defaultValue 'mandatory'
*/
scrollSnap?: false | 'proximity' | 'mandatory';
/**
* Enables and configures the scroll view progress bar.
* - 'auto': Show the scrollbar while scrolling, hide while idle
* - true: Always show the scrollbar
* - false: Never show the scrollbar
*
* @defaultValue 'auto'
*/
scrollProgress?: 'auto' | boolean;
/**
* Automatically activate the scroll view when we the viewport falls
* below the given width.
*
* @defaultValue 435
*/
scrollActivationWidth?: number;
/**
* The maximum number of pages a single slide can expand onto when printing
* to PDF, unlimited by default
*
* @defaultValue Number.POSITIVE_INFINITY
*/
pdfMaxPagesPerSlide?: number;
/**
* Prints each fragment on a separate slide
*
* @defaultValue true
*/
pdfSeparateFragments?: boolean;
/**
* Offset used to reduce the height of content within exported PDF pages.
* This exists to account for environment differences based on how you
* print to PDF. CLI printing options, like phantomjs and wkpdf, can end
* on precisely the total height of the document whereas in-browser
* printing has to end one pixel before.
*
* @defaultValue -1
*/
pdfPageHeightOffset?: number;
/**
* Number of slides away from the current that are visible
*
* @defaultValue 3
*/
viewDistance?: number;
/**
* Number of slides away from the current that are visible on mobile
* devices. It is advisable to set this to a lower number than
* viewDistance in order to save resources.
*
* @defaultValue 2
*/
mobileViewDistance?: number;
/**
* The display mode that will be used to show slides
*
* @defaultValue 'block'
*/
display?: string;
/**
* Hide cursor if inactive
*
* @defaultValue true
*/
hideInactiveCursor?: boolean;
/**
* Time before the cursor is hidden (in ms)
*
* @defaultValue 5000
*/
hideCursorTime?: number;
/**
* Should we automatically sort and set indices for fragments
* at each sync? (See Reveal.sync)
*
* @defaultValue true
*/
sortFragmentsOnSync?: boolean;
/**
* Highlight plugin configuration
*/
highlight?: HighlightConfig;
/**
* Markdown plugin configuration
*/
markdown?: MarkdownConfig;
/**
* KaTeX math plugin configuration
*/
katex?: KatexConfig;
/**
* MathJax 2 plugin configuration
*/
mathjax2?: Mathjax2Config;
/**
* MathJax 3 plugin configuration
*/
mathjax3?: Mathjax3Config;
/**
* MathJax 4 plugin configuration
*/
mathjax4?: Mathjax4Config;
/**
* Script dependencies to load
*
* @defaultValue []
*/
dependencies?: any[];
/**
* Plugin objects to register and use for this presentation
*
* @defaultValue []
*/
plugins?: any[];
}
/**
* The default reveal.js config object.
*/
declare const defaultConfig: RevealConfig;
export type { RevealConfig, TransitionStyle, TransitionSpeed, FragmentAnimation, KatexConfig, Mathjax2Config, Mathjax3Config, Mathjax4Config, HighlightConfig, MarkdownConfig, };
export { defaultConfig };
================================================
FILE: dist/plugin/highlight/monokai.css
================================================
/*
Monokai style - ported by Luigi Maselli - http://grigio.org
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #272822;
color: #ddd;
}
.hljs-tag,
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal,
.hljs-strong,
.hljs-name {
color: #f92672;
}
.hljs-code {
color: #66d9ef;
}
.hljs-class .hljs-title {
color: white;
}
.hljs-attribute,
.hljs-symbol,
.hljs-regexp,
.hljs-link {
color: #bf79db;
}
.hljs-string,
.hljs-bullet,
.hljs-subst,
.hljs-title,
.hljs-section,
.hljs-emphasis,
.hljs-type,
.hljs-built_in,
.hljs-builtin-name,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-addition,
.hljs-variable,
.hljs-template-tag,
.hljs-template-variable {
color: #a6e22e;
}
.hljs-comment,
.hljs-quote,
.hljs-deletion,
.hljs-meta {
color: #75715e;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal,
.hljs-doctag,
.hljs-title,
.hljs-section,
.hljs-type,
.hljs-selector-id {
font-weight: bold;
}
================================================
FILE: dist/plugin/highlight/zenburn.css
================================================
/*
Zenburn style from voldmar.ru (c) Vladimir Epifanov
based on dark.css by Ivan Sagalaev
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #3f3f3f;
color: #dcdcdc;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-tag {
color: #e3ceab;
}
.hljs-template-tag {
color: #dcdcdc;
}
.hljs-number {
color: #8cd0d3;
}
.hljs-variable,
.hljs-template-variable,
.hljs-attribute {
color: #efdcbc;
}
.hljs-literal {
color: #efefaf;
}
.hljs-subst {
color: #8f8f8f;
}
.hljs-title,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class,
.hljs-section,
.hljs-type {
color: #efef8f;
}
.hljs-symbol,
.hljs-bullet,
.hljs-link {
color: #dca3a3;
}
.hljs-deletion,
.hljs-string,
.hljs-built_in,
.hljs-builtin-name {
color: #cc9393;
}
.hljs-addition,
.hljs-comment,
.hljs-quote,
.hljs-meta {
color: #7f9f7f;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
================================================
FILE: dist/plugin/highlight.d.ts
================================================
import { HLJSApi } from 'highlight.js';
import { RevealPlugin } from 'reveal.js';
export interface HighlightLine {
start?: number;
end?: number;
}
export interface HighlightLineNumbersOptions {
singleLine?: boolean;
startFrom?: number;
}
export interface HighlightJsApi extends HLJSApi {
initLineNumbersOnLoad(options?: HighlightLineNumbersOptions): void;
lineNumbersBlock(element: HTMLElement, options?: HighlightLineNumbersOptions): void;
lineNumbersValue(code: string, options?: HighlightLineNumbersOptions): string | undefined;
}
export interface HighlightScrollState {
currentBlock?: HTMLElement;
animationFrameID?: number;
}
export interface HighlightLineBounds {
top: number;
bottom: number;
}
export type HighlightLineStep = HighlightLine[];
export interface HighlightPlugin extends RevealPlugin {
id: 'highlight';
HIGHLIGHT_STEP_DELIMITER: '|';
HIGHLIGHT_LINE_DELIMITER: ',';
HIGHLIGHT_LINE_RANGE_DELIMITER: '-';
hljs: HighlightJsApi;
highlightBlock(block: HTMLElement): void;
scrollHighlightedLineIntoView(block: HTMLElement, scrollState: HighlightScrollState, skipAnimation?: boolean): void;
easeInOutQuart(t: number): number;
getHighlightedLineBounds(block: HTMLElement): HighlightLineBounds;
highlightLines(block: HTMLElement, linesToHighlight?: string): void;
deserializeHighlightSteps(highlightSteps: string): HighlightLineStep[];
serializeHighlightSteps(highlightSteps: HighlightLineStep[]): string;
}
declare const Highlight: () => HighlightPlugin;
export default Highlight;
================================================
FILE: dist/plugin/highlight.js
================================================
(function(ze,ke){typeof exports=="object"&&typeof module<"u"?module.exports=ke():typeof define=="function"&&define.amd?define(ke):(ze=typeof globalThis<"u"?globalThis:ze||self,ze.RevealHighlight=ke())})(this,(function(){"use strict";function ze(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var ke,si;function ac(){if(si)return ke;si=1;function t(u){return u instanceof Map?u.clear=u.delete=u.set=function(){throw new Error("map is read-only")}:u instanceof Set&&(u.add=u.clear=u.delete=function(){throw new Error("set is read-only")}),Object.freeze(u),Object.getOwnPropertyNames(u).forEach(f=>{const v=u[f],F=typeof v;(F==="object"||F==="function")&&!Object.isFrozen(v)&&t(v)}),u}class e{constructor(f){f.data===void 0&&(f.data={}),this.data=f.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function n(u){return u.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function a(u,...f){const v=Object.create(null);for(const F in u)v[F]=u[F];return f.forEach(function(F){for(const ae in F)v[ae]=F[ae]}),v}const r="",i=u=>!!u.scope,s=(u,{prefix:f})=>{if(u.startsWith("language:"))return u.replace("language:","language-");if(u.includes(".")){const v=u.split(".");return[`${f}${v.shift()}`,...v.map((F,ae)=>`${F}${"_".repeat(ae+1)}`)].join(" ")}return`${f}${u}`};class o{constructor(f,v){this.buffer="",this.classPrefix=v.classPrefix,f.walk(this)}addText(f){this.buffer+=n(f)}openNode(f){if(!i(f))return;const v=s(f.scope,{prefix:this.classPrefix});this.span(v)}closeNode(f){i(f)&&(this.buffer+=r)}value(){return this.buffer}span(f){this.buffer+=``}}const _=(u={})=>{const f={children:[]};return Object.assign(f,u),f};class l{constructor(){this.rootNode=_(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(f){this.top.children.push(f)}openNode(f){const v=_({scope:f});this.add(v),this.stack.push(v)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(f){return this.constructor._walk(f,this.rootNode)}static _walk(f,v){return typeof v=="string"?f.addText(v):v.children&&(f.openNode(v),v.children.forEach(F=>this._walk(f,F)),f.closeNode(v)),f}static _collapse(f){typeof f!="string"&&f.children&&(f.children.every(v=>typeof v=="string")?f.children=[f.children.join("")]:f.children.forEach(v=>{l._collapse(v)}))}}class c extends l{constructor(f){super(),this.options=f}addText(f){f!==""&&this.add(f)}startScope(f){this.openNode(f)}endScope(){this.closeNode()}__addSublanguage(f,v){const F=f.root;v&&(F.scope=`language:${v}`),this.add(F)}toHTML(){return new o(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function d(u){return u?typeof u=="string"?u:u.source:null}function p(u){return T("(?=",u,")")}function E(u){return T("(?:",u,")*")}function m(u){return T("(?:",u,")?")}function T(...u){return u.map(v=>d(v)).join("")}function g(u){const f=u[u.length-1];return typeof f=="object"&&f.constructor===Object?(u.splice(u.length-1,1),f):{}}function S(...u){return"("+(g(u).capture?"":"?:")+u.map(F=>d(F)).join("|")+")"}function b(u){return new RegExp(u.toString()+"|").exec("").length-1}function R(u,f){const v=u&&u.exec(f);return v&&v.index===0}const O=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function N(u,{joinWith:f}){let v=0;return u.map(F=>{v+=1;const ae=v;let re=d(F),P="";for(;re.length>0;){const L=O.exec(re);if(!L){P+=re;break}P+=re.substring(0,L.index),re=re.substring(L.index+L[0].length),L[0][0]==="\\"&&L[1]?P+="\\"+String(Number(L[1])+ae):(P+=L[0],L[0]==="("&&v++)}return P}).map(F=>`(${F})`).join(f)}const C=/\b\B/,h="[a-zA-Z]\\w*",I="[a-zA-Z_]\\w*",D="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",M="\\b(0b[01]+)",Y="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Z=(u={})=>{const f=/^#![ ]*\//;return u.binary&&(u.begin=T(f,/.*\b/,u.binary,/\b.*/)),a({scope:"meta",begin:f,end:/$/,relevance:0,"on:begin":(v,F)=>{v.index!==0&&F.ignoreMatch()}},u)},J={begin:"\\\\[\\s\\S]",relevance:0},H={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[J]},K={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[J]},j={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},ne=function(u,f,v={}){const F=a({scope:"comment",begin:u,end:f,contains:[]},v);F.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ae=S("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return F.contains.push({begin:T(/[ ]+/,"(",ae,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),F},Se=ne("//","$"),fe=ne("/\\*","\\*/"),Te=ne("#","$"),Ce={scope:"number",begin:D,relevance:0},be={scope:"number",begin:w,relevance:0},me={scope:"number",begin:M,relevance:0},se={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[J,{begin:/\[/,end:/\]/,relevance:0,contains:[J]}]},_e={scope:"title",begin:h,relevance:0},Q={scope:"title",begin:I,relevance:0},z={begin:"\\.\\s*"+I,relevance:0};var te=Object.freeze({__proto__:null,APOS_STRING_MODE:H,BACKSLASH_ESCAPE:J,BINARY_NUMBER_MODE:me,BINARY_NUMBER_RE:M,COMMENT:ne,C_BLOCK_COMMENT_MODE:fe,C_LINE_COMMENT_MODE:Se,C_NUMBER_MODE:be,C_NUMBER_RE:w,END_SAME_AS_BEGIN:function(u){return Object.assign(u,{"on:begin":(f,v)=>{v.data._beginMatch=f[1]},"on:end":(f,v)=>{v.data._beginMatch!==f[1]&&v.ignoreMatch()}})},HASH_COMMENT_MODE:Te,IDENT_RE:h,MATCH_NOTHING_RE:C,METHOD_GUARD:z,NUMBER_MODE:Ce,NUMBER_RE:D,PHRASAL_WORDS_MODE:j,QUOTE_STRING_MODE:K,REGEXP_MODE:se,RE_STARTERS_RE:Y,SHEBANG:Z,TITLE_MODE:_e,UNDERSCORE_IDENT_RE:I,UNDERSCORE_TITLE_MODE:Q});function le(u,f){u.input[u.index-1]==="."&&f.ignoreMatch()}function Ee(u,f){u.className!==void 0&&(u.scope=u.className,delete u.className)}function Ne(u,f){f&&u.beginKeywords&&(u.begin="\\b("+u.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",u.__beforeBegin=le,u.keywords=u.keywords||u.beginKeywords,delete u.beginKeywords,u.relevance===void 0&&(u.relevance=0))}function We(u,f){Array.isArray(u.illegal)&&(u.illegal=S(...u.illegal))}function ct(u,f){if(u.match){if(u.begin||u.end)throw new Error("begin & end are not supported with match");u.begin=u.match,delete u.match}}function Ge(u,f){u.relevance===void 0&&(u.relevance=1)}const Ke=(u,f)=>{if(!u.beforeMatch)return;if(u.starts)throw new Error("beforeMatch cannot be used with starts");const v=Object.assign({},u);Object.keys(u).forEach(F=>{delete u[F]}),u.keywords=v.keywords,u.begin=T(v.beforeMatch,p(v.begin)),u.starts={relevance:0,contains:[Object.assign(v,{endsParent:!0})]},u.relevance=0,delete v.beforeMatch},$e=["of","and","for","in","not","or","if","then","parent","list","value"],_t="keyword";function Qe(u,f,v=_t){const F=Object.create(null);return typeof u=="string"?ae(v,u.split(" ")):Array.isArray(u)?ae(v,u):Object.keys(u).forEach(function(re){Object.assign(F,Qe(u[re],f,re))}),F;function ae(re,P){f&&(P=P.map(L=>L.toLowerCase())),P.forEach(function(L){const U=L.split("|");F[U[0]]=[re,Ye(U[0],U[1])]})}}function Ye(u,f){return f?Number(f):dt(u)?0:1}function dt(u){return $e.includes(u.toLowerCase())}const Xe={},ye=u=>{console.error(u)},we=(u,...f)=>{console.log(`WARN: ${u}`,...f)},ge=(u,f)=>{Xe[`${u}/${f}`]||(console.log(`Deprecated as of ${u}. ${f}`),Xe[`${u}/${f}`]=!0)},Ue=new Error;function Ze(u,f,{key:v}){let F=0;const ae=u[v],re={},P={};for(let L=1;L<=f.length;L++)P[L+F]=ae[L],re[L+F]=!0,F+=b(f[L-1]);u[v]=P,u[v]._emit=re,u[v]._multi=!0}function Je(u){if(Array.isArray(u.begin)){if(u.skip||u.excludeBegin||u.returnBegin)throw ye("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Ue;if(typeof u.beginScope!="object"||u.beginScope===null)throw ye("beginScope must be object"),Ue;Ze(u,u.begin,{key:"beginScope"}),u.begin=N(u.begin,{joinWith:""})}}function qe(u){if(Array.isArray(u.end)){if(u.skip||u.excludeEnd||u.returnEnd)throw ye("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Ue;if(typeof u.endScope!="object"||u.endScope===null)throw ye("endScope must be object"),Ue;Ze(u,u.end,{key:"endScope"}),u.end=N(u.end,{joinWith:""})}}function ut(u){u.scope&&typeof u.scope=="object"&&u.scope!==null&&(u.beginScope=u.scope,delete u.scope)}function je(u){ut(u),typeof u.beginScope=="string"&&(u.beginScope={_wrap:u.beginScope}),typeof u.endScope=="string"&&(u.endScope={_wrap:u.endScope}),Je(u),qe(u)}function pt(u){function f(P,L){return new RegExp(d(P),"m"+(u.case_insensitive?"i":"")+(u.unicodeRegex?"u":"")+(L?"g":""))}class v{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(L,U){U.position=this.position++,this.matchIndexes[this.matchAt]=U,this.regexes.push([U,L]),this.matchAt+=b(L)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const L=this.regexes.map(U=>U[1]);this.matcherRe=f(N(L,{joinWith:"|"}),!0),this.lastIndex=0}exec(L){this.matcherRe.lastIndex=this.lastIndex;const U=this.matcherRe.exec(L);if(!U)return null;const de=U.findIndex((Ve,St)=>St>0&&Ve!==void 0),oe=this.matchIndexes[de];return U.splice(0,de),Object.assign(U,oe)}}class F{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(L){if(this.multiRegexes[L])return this.multiRegexes[L];const U=new v;return this.rules.slice(L).forEach(([de,oe])=>U.addRule(de,oe)),U.compile(),this.multiRegexes[L]=U,U}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(L,U){this.rules.push([L,U]),U.type==="begin"&&this.count++}exec(L){const U=this.getMatcher(this.regexIndex);U.lastIndex=this.lastIndex;let de=U.exec(L);if(this.resumingScanAtSamePosition()&&!(de&&de.index===this.lastIndex)){const oe=this.getMatcher(0);oe.lastIndex=this.lastIndex+1,de=oe.exec(L)}return de&&(this.regexIndex+=de.position+1,this.regexIndex===this.count&&this.considerAll()),de}}function ae(P){const L=new F;return P.contains.forEach(U=>L.addRule(U.begin,{rule:U,type:"begin"})),P.terminatorEnd&&L.addRule(P.terminatorEnd,{type:"end"}),P.illegal&&L.addRule(P.illegal,{type:"illegal"}),L}function re(P,L){const U=P;if(P.isCompiled)return U;[Ee,ct,je,Ke].forEach(oe=>oe(P,L)),u.compilerExtensions.forEach(oe=>oe(P,L)),P.__beforeBegin=null,[Ne,We,Ge].forEach(oe=>oe(P,L)),P.isCompiled=!0;let de=null;return typeof P.keywords=="object"&&P.keywords.$pattern&&(P.keywords=Object.assign({},P.keywords),de=P.keywords.$pattern,delete P.keywords.$pattern),de=de||/\w+/,P.keywords&&(P.keywords=Qe(P.keywords,u.case_insensitive)),U.keywordPatternRe=f(de,!0),L&&(P.begin||(P.begin=/\B|\b/),U.beginRe=f(U.begin),!P.end&&!P.endsWithParent&&(P.end=/\B|\b/),P.end&&(U.endRe=f(U.end)),U.terminatorEnd=d(U.end)||"",P.endsWithParent&&L.terminatorEnd&&(U.terminatorEnd+=(P.end?"|":"")+L.terminatorEnd)),P.illegal&&(U.illegalRe=f(P.illegal)),P.contains||(P.contains=[]),P.contains=[].concat(...P.contains.map(function(oe){return mt(oe==="self"?P:oe)})),P.contains.forEach(function(oe){re(oe,U)}),P.starts&&re(P.starts,L),U.matcher=ae(U),U}if(u.compilerExtensions||(u.compilerExtensions=[]),u.contains&&u.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return u.classNameAliases=a(u.classNameAliases||{}),re(u)}function et(u){return u?u.endsWithParent||et(u.starts):!1}function mt(u){return u.variants&&!u.cachedVariants&&(u.cachedVariants=u.variants.map(function(f){return a(u,{variants:null},f)})),u.cachedVariants?u.cachedVariants:et(u)?a(u,{starts:u.starts?a(u.starts):null}):Object.isFrozen(u)?a(u):u}var Et="11.11.1";class gt extends Error{constructor(f,v){super(f),this.name="HTMLInjectionError",this.html=v}}const He=n,tt=a,W=Symbol("nomatch"),Fe=7,Me=function(u){const f=Object.create(null),v=Object.create(null),F=[];let ae=!0;const re="Could not find the language '{}', did you forget to load/include a language module?",P={disableAutodetect:!0,name:"Plain text",contains:[]};let L={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:c};function U(A){return L.noHighlightRe.test(A)}function de(A){let k=A.className+" ";k+=A.parentNode?A.parentNode.className:"";const q=L.languageDetectRe.exec(k);if(q){const X=xe(q[1]);return X||(we(re.replace("{}",q[1])),we("Falling back to no-highlight mode for this block.",A)),X?q[1]:"no-highlight"}return k.split(/\s+/).find(X=>U(X)||xe(X))}function oe(A,k,q){let X="",ce="";typeof k=="object"?(X=A,q=k.ignoreIllegals,ce=k.language):(ge("10.7.0","highlight(lang, code, ...args) has been deprecated."),ge("10.7.0",`Please use highlight(code, options) instead.
https://github.com/highlightjs/highlight.js/issues/2277`),ce=A,X=k),q===void 0&&(q=!0);const Oe={code:X,language:ce};at("before:highlight",Oe);const Pe=Oe.result?Oe.result:Ve(Oe.language,Oe.code,q);return Pe.code=Oe.code,at("after:highlight",Pe),Pe}function Ve(A,k,q,X){const ce=Object.create(null);function Oe(y,x){return y.keywords[x]}function Pe(){if(!B.keywords){ue.addText($);return}let y=0;B.keywordPatternRe.lastIndex=0;let x=B.keywordPatternRe.exec($),G="";for(;x;){G+=$.substring(y,x.index);const V=Ie.case_insensitive?x[0].toLowerCase():x[0],pe=Oe(B,V);if(pe){const[Ae,tc]=pe;if(ue.addText(G),G="",ce[V]=(ce[V]||0)+1,ce[V]<=Fe&&(Be+=tc),Ae.startsWith("_"))G+=x[0];else{const nc=Ie.classNameAliases[Ae]||Ae;ve(x[0],nc)}}else G+=x[0];y=B.keywordPatternRe.lastIndex,x=B.keywordPatternRe.exec($)}G+=$.substring(y),ue.addText(G)}function rt(){if($==="")return;let y=null;if(typeof B.subLanguage=="string"){if(!f[B.subLanguage]){ue.addText($);return}y=Ve(B.subLanguage,$,!0,ft[B.subLanguage]),ft[B.subLanguage]=y._top}else y=Tt($,B.subLanguage.length?B.subLanguage:null);B.relevance>0&&(Be+=y.relevance),ue.__addSublanguage(y._emitter,y.language)}function Re(){B.subLanguage!=null?rt():Pe(),$=""}function ve(y,x){y!==""&&(ue.startScope(x),ue.addText(y),ue.endScope())}function ai(y,x){let G=1;const V=x.length-1;for(;G<=V;){if(!y._emit[G]){G++;continue}const pe=Ie.classNameAliases[y[G]]||y[G],Ae=x[G];pe?ve(Ae,pe):($=Ae,Pe(),$=""),G++}}function ri(y,x){return y.scope&&typeof y.scope=="string"&&ue.openNode(Ie.classNameAliases[y.scope]||y.scope),y.beginScope&&(y.beginScope._wrap?(ve($,Ie.classNameAliases[y.beginScope._wrap]||y.beginScope._wrap),$=""):y.beginScope._multi&&(ai(y.beginScope,x),$="")),B=Object.create(y,{parent:{value:B}}),B}function ii(y,x,G){let V=R(y.endRe,G);if(V){if(y["on:end"]){const pe=new e(y);y["on:end"](x,pe),pe.isMatchIgnored&&(V=!1)}if(V){for(;y.endsParent&&y.parent;)y=y.parent;return y}}if(y.endsWithParent)return ii(y.parent,x,G)}function Zl(y){return B.matcher.regexIndex===0?($+=y[0],1):(lt=!0,0)}function Jl(y){const x=y[0],G=y.rule,V=new e(G),pe=[G.__beforeBegin,G["on:begin"]];for(const Ae of pe)if(Ae&&(Ae(y,V),V.isMatchIgnored))return Zl(x);return G.skip?$+=x:(G.excludeBegin&&($+=x),Re(),!G.returnBegin&&!G.excludeBegin&&($=x)),ri(G,y),G.returnBegin?0:x.length}function jl(y){const x=y[0],G=k.substring(y.index),V=ii(B,y,G);if(!V)return W;const pe=B;B.endScope&&B.endScope._wrap?(Re(),ve(x,B.endScope._wrap)):B.endScope&&B.endScope._multi?(Re(),ai(B.endScope,y)):pe.skip?$+=x:(pe.returnEnd||pe.excludeEnd||($+=x),Re(),pe.excludeEnd&&($=x));do B.scope&&ue.closeNode(),!B.skip&&!B.subLanguage&&(Be+=B.relevance),B=B.parent;while(B!==V.parent);return V.starts&&ri(V.starts,y),pe.returnEnd?0:x.length}function ec(){const y=[];for(let x=B;x!==Ie;x=x.parent)x.scope&&y.unshift(x.scope);y.forEach(x=>ue.openNode(x))}let it={};function Rt(y,x){const G=x&&x[0];if($+=y,G==null)return Re(),0;if(it.type==="begin"&&x.type==="end"&&it.index===x.index&&G===""){if($+=k.slice(x.index,x.index+1),!ae){const V=new Error(`0 width match regex (${A})`);throw V.languageName=A,V.badRule=it.rule,V}return 1}if(it=x,x.type==="begin")return Jl(x);if(x.type==="illegal"&&!q){const V=new Error('Illegal lexeme "'+G+'" for mode "'+(B.scope||"")+'"');throw V.mode=B,V}else if(x.type==="end"){const V=jl(x);if(V!==W)return V}if(x.type==="illegal"&&G==="")return $+=`
`,1;if(st>1e5&&st>x.index*3)throw new Error("potential infinite loop, way more iterations than matches");return $+=G,G.length}const Ie=xe(A);if(!Ie)throw ye(re.replace("{}",A)),new Error('Unknown language: "'+A+'"');const oi=pt(Ie);let ot="",B=X||oi;const ft={},ue=new L.__emitter(L);ec();let $="",Be=0,he=0,st=0,lt=!1;try{if(Ie.__emitTokens)Ie.__emitTokens(k,ue);else{for(B.matcher.considerAll();;){st++,lt?lt=!1:B.matcher.considerAll(),B.matcher.lastIndex=he;const y=B.matcher.exec(k);if(!y)break;const x=k.substring(he,y.index),G=Rt(x,y);he=y.index+G}Rt(k.substring(he))}return ue.finalize(),ot=ue.toHTML(),{language:A,value:ot,relevance:Be,illegal:!1,_emitter:ue,_top:B}}catch(y){if(y.message&&y.message.includes("Illegal"))return{language:A,value:He(k),illegal:!0,relevance:0,_illegalBy:{message:y.message,index:he,context:k.slice(he-100,he+100),mode:y.mode,resultSoFar:ot},_emitter:ue};if(ae)return{language:A,value:He(k),illegal:!1,relevance:0,errorRaised:y,_emitter:ue,_top:B};throw y}}function St(A){const k={value:He(A),illegal:!1,relevance:0,_top:P,_emitter:new L.__emitter(L)};return k._emitter.addText(A),k}function Tt(A,k){k=k||L.languages||Object.keys(f);const q=St(A),X=k.filter(xe).filter(ni).map(Re=>Ve(Re,A,!1));X.unshift(q);const ce=X.sort((Re,ve)=>{if(Re.relevance!==ve.relevance)return ve.relevance-Re.relevance;if(Re.language&&ve.language){if(xe(Re.language).supersetOf===ve.language)return 1;if(xe(ve.language).supersetOf===Re.language)return-1}return 0}),[Oe,Pe]=ce,rt=Oe;return rt.secondBest=Pe,rt}function Gl(A,k,q){const X=k&&v[k]||q;A.classList.add("hljs"),A.classList.add(`language-${X}`)}function bt(A){let k=null;const q=de(A);if(U(q))return;if(at("before:highlightElement",{el:A,language:q}),A.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",A);return}if(A.children.length>0&&(L.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(A)),L.throwUnescapedHTML))throw new gt("One of your code blocks includes unescaped HTML.",A.innerHTML);k=A;const X=k.textContent,ce=q?oe(X,{language:q,ignoreIllegals:!0}):Tt(X);A.innerHTML=ce.value,A.dataset.highlighted="yes",Gl(A,q,ce.language),A.result={language:ce.language,re:ce.relevance,relevance:ce.relevance},ce.secondBest&&(A.secondBest={language:ce.secondBest.language,relevance:ce.secondBest.relevance}),at("after:highlightElement",{el:A,result:ce,text:X})}function Yl(A){L=tt(L,A)}const ql=()=>{nt(),ge("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Hl(){nt(),ge("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let ei=!1;function nt(){function A(){nt()}if(document.readyState==="loading"){ei||window.addEventListener("DOMContentLoaded",A,!1),ei=!0;return}document.querySelectorAll(L.cssSelector).forEach(bt)}function Vl(A,k){let q=null;try{q=k(u)}catch(X){if(ye("Language definition for '{}' could not be registered.".replace("{}",A)),ae)ye(X);else throw X;q=P}q.name||(q.name=A),f[A]=q,q.rawDefinition=k.bind(null,u),q.aliases&&ti(q.aliases,{languageName:A})}function zl(A){delete f[A];for(const k of Object.keys(v))v[k]===A&&delete v[k]}function Wl(){return Object.keys(f)}function xe(A){return A=(A||"").toLowerCase(),f[A]||f[v[A]]}function ti(A,{languageName:k}){typeof A=="string"&&(A=[A]),A.forEach(q=>{v[q.toLowerCase()]=k})}function ni(A){const k=xe(A);return k&&!k.disableAutodetect}function Kl(A){A["before:highlightBlock"]&&!A["before:highlightElement"]&&(A["before:highlightElement"]=k=>{A["before:highlightBlock"](Object.assign({block:k.el},k))}),A["after:highlightBlock"]&&!A["after:highlightElement"]&&(A["after:highlightElement"]=k=>{A["after:highlightBlock"](Object.assign({block:k.el},k))})}function $l(A){Kl(A),F.push(A)}function Ql(A){const k=F.indexOf(A);k!==-1&&F.splice(k,1)}function at(A,k){const q=A;F.forEach(function(X){X[q]&&X[q](k)})}function Xl(A){return ge("10.7.0","highlightBlock will be removed entirely in v12.0"),ge("10.7.0","Please use highlightElement now."),bt(A)}Object.assign(u,{highlight:oe,highlightAuto:Tt,highlightAll:nt,highlightElement:bt,highlightBlock:Xl,configure:Yl,initHighlighting:ql,initHighlightingOnLoad:Hl,registerLanguage:Vl,unregisterLanguage:zl,listLanguages:Wl,getLanguage:xe,registerAliases:ti,autoDetection:ni,inherit:tt,addPlugin:$l,removePlugin:Ql}),u.debugMode=function(){ae=!1},u.safeMode=function(){ae=!0},u.versionString=Et,u.regex={concat:T,lookahead:p,either:S,optional:m,anyNumberOfTimes:E};for(const A in te)typeof te[A]=="object"&&t(te[A]);return Object.assign(u,te),u},Le=Me({});return Le.newInstance=()=>Me({}),ke=Le,Le.HighlightJS=Le,Le.default=Le,ke}var Ct,li;function rc(){if(li)return Ct;li=1;function t(e){const n="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+",i="далее "+"возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ",_="загрузитьизфайла "+"вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ",E="разделительстраниц разделительстрок символтабуляции "+"ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон "+"acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища "+"wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ",fe="webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля "+"автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы "+"виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента "+"авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных "+"использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц "+"отображениевремениэлементовпланировщика "+"типфайлаформатированногодокумента "+"обходрезультатазапроса типзаписизапроса "+"видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов "+"доступкфайлу режимдиалогавыборафайла режимоткрытияфайла "+"типизмеренияпостроителязапроса "+"видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений "+"wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs форматдатыjson экранированиесимволовjson "+"видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных использованиеусловногооформлениякомпоновкиданных "+"важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты статусразборапочтовогосообщения "+"режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации "+"расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии типхранилищасертификатовкриптографии "+"кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip режимсохраненияпутейzip уровеньсжатияzip "+"звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp "+"направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса "+"httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса типномерадокумента типномеразадачи типформы удалениедвижений "+"важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты",be="comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных "+"comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура фиксированноесоответствие фиксированныймассив ",me="null истина ложь неопределено",se=e.inherit(e.NUMBER_MODE),_e={className:"string",begin:'"|\\|',end:'"|$',contains:[{begin:'""'}]},Q={begin:"'",end:"'",excludeBegin:!0,excludeEnd:!0,contains:[{className:"number",begin:"\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"}]},z={match:/[;()+\-:=,]/,className:"punctuation",relevance:0},ee=e.inherit(e.C_LINE_COMMENT_MODE),te={className:"meta",begin:"#|&",end:"$",keywords:{$pattern:n,keyword:i+_},contains:[ee]},le={className:"symbol",begin:"~",end:";|:",excludeEnd:!0},Ee={className:"function",variants:[{begin:"процедура|функция",end:"\\)",keywords:"процедура функция"},{begin:"конецпроцедуры|конецфункции",keywords:"конецпроцедуры конецфункции"}],contains:[{begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"params",begin:n,end:",",excludeEnd:!0,endsWithParent:!0,keywords:{$pattern:n,keyword:"знач",literal:me},contains:[se,_e,Q]},ee]},e.inherit(e.TITLE_MODE,{begin:n})]};return{name:"1C:Enterprise",case_insensitive:!0,keywords:{$pattern:n,keyword:i,built_in:E,class:fe,type:be,literal:me},contains:[te,Ee,ee,le,se,_e,Q,z]}}return Ct=t,Ct}var Nt,ci;function ic(){if(ci)return Nt;ci=1;function t(e){const n=e.regex,a=/^[a-zA-Z][a-zA-Z0-9-]*/,r=["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"],i=e.COMMENT(/;/,/$/),s={scope:"symbol",match:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+)?/},o={scope:"symbol",match:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+)?/},_={scope:"symbol",match:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+)?/},l={scope:"symbol",match:/%[si](?=".*")/},c={scope:"attribute",match:n.concat(a,/(?=\s*=)/)};return{name:"Augmented Backus-Naur Form",illegal:/[!@#$^&',?+~`|:]/,keywords:r,contains:[{scope:"operator",match:/=\/?/},c,i,s,o,_,l,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}return Nt=t,Nt}var Ot,_i;function oc(){if(_i)return Ot;_i=1;function t(e){const n=e.regex,a=["GET","POST","HEAD","PUT","DELETE","CONNECT","OPTIONS","PATCH","TRACE"];return{name:"Apache Access Log",contains:[{className:"number",begin:/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?\b/,relevance:5},{className:"number",begin:/\b\d+\b/,relevance:0},{className:"string",begin:n.concat(/"/,n.either(...a)),end:/"/,keywords:a,illegal:/\n/,relevance:5,contains:[{begin:/HTTP\/[12]\.\d'/,relevance:5}]},{className:"string",begin:/\[\d[^\]\n]{8,}\]/,illegal:/\n/,relevance:1},{className:"string",begin:/\[/,end:/\]/,illegal:/\n/,relevance:0},{className:"string",begin:/"Mozilla\/\d\.\d \(/,end:/"/,illegal:/\n/,relevance:3},{className:"string",begin:/"/,end:/"/,illegal:/\n/,relevance:0}]}}return Ot=t,Ot}var It,di;function sc(){if(di)return It;di=1;function t(e){const n=e.regex,a=/[a-zA-Z_$][a-zA-Z0-9_$]*/,r=n.concat(a,n.concat("(\\.",a,")*")),i=/([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/,s={className:"rest_arg",begin:/[.]{3}/,end:a,relevance:10};return{name:"ActionScript",aliases:["as"],keywords:{keyword:["as","break","case","catch","class","const","continue","default","delete","do","dynamic","each","else","extends","final","finally","for","function","get","if","implements","import","in","include","instanceof","interface","internal","is","namespace","native","new","override","package","private","protected","public","return","set","static","super","switch","this","throw","try","typeof","use","var","void","while","with"],literal:["true","false","null","undefined"]},contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{match:[/\bpackage/,/\s+/,r],className:{1:"keyword",3:"title.class"}},{match:[/\b(?:class|interface|extends|implements)/,/\s+/,a],className:{1:"keyword",3:"title.class"}},{className:"meta",beginKeywords:"import include",end:/;/,keywords:{keyword:"import include"}},{beginKeywords:"function",end:/[{;]/,excludeEnd:!0,illegal:/\S/,contains:[e.inherit(e.TITLE_MODE,{className:"title.function"}),{className:"params",begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]},{begin:n.concat(/:\s*/,i)}]},e.METHOD_GUARD],illegal:/#/}}return It=t,It}var At,ui;function lc(){if(ui)return At;ui=1;function t(e){const n="\\d(_|\\d)*",a="[eE][-+]?"+n,r=n+"(\\."+n+")?("+a+")?",i="\\w+",o="\\b("+(n+"#"+i+"(\\."+i+")?#("+a+")?")+"|"+r+")",_="[A-Za-z](_?[A-Za-z0-9.])*",l=`[]\\{\\}%#'"`,c=e.COMMENT("--","$"),d={begin:"\\s+:\\s+",end:"\\s*(:=|;|\\)|=>|$)",illegal:l,contains:[{beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",beginKeywords:"not null constant access function procedure in out aliased exception"},{className:"type",begin:_,endsParent:!0,relevance:0}]};return{name:"Ada",case_insensitive:!0,keywords:{keyword:["abort","else","new","return","abs","elsif","not","reverse","abstract","end","accept","entry","select","access","exception","of","separate","aliased","exit","or","some","all","others","subtype","and","for","out","synchronized","array","function","overriding","at","tagged","generic","package","task","begin","goto","pragma","terminate","body","private","then","if","procedure","type","case","in","protected","constant","interface","is","raise","use","declare","range","delay","limited","record","when","delta","loop","rem","while","digits","renames","with","do","mod","requeue","xor"],literal:["True","False"]},contains:[c,{className:"string",begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{className:"number",begin:o,relevance:0},{className:"symbol",begin:"'"+_},{className:"title",begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:l},{begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",keywords:"overriding function procedure with is renames return",returnBegin:!0,contains:[c,{className:"title",begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",excludeBegin:!0,excludeEnd:!0,illegal:l},d,{className:"type",begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,excludeEnd:!0,endsParent:!0,illegal:l}]},{className:"type",begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:l},d]}}return At=t,At}var vt,pi;function cc(){if(pi)return vt;pi=1;function t(e){const n={className:"built_in",begin:"\\b(void|bool|int8|int16|int32|int64|int|uint8|uint16|uint32|uint64|uint|string|ref|array|double|float|auto|dictionary)"},a={className:"symbol",begin:"[a-zA-Z0-9_]+@"},r={className:"keyword",begin:"<",end:">",contains:[n,a]};return n.contains=[r],a.contains=[r],{name:"AngelScript",aliases:["asc"],keywords:["for","in|0","break","continue","while","do|0","return","if","else","case","switch","namespace","is","cast","or","and","xor","not","get|0","in","inout|10","out","override","set|0","private","public","const","default|0","final","shared","external","mixin|10","enum","typedef","funcdef","this","super","import","from","interface","abstract|0","try","catch","protected","explicit","property"],illegal:"(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])",contains:[{className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"""',end:'"""'},{className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:"^\\s*\\[",end:"\\]"},{beginKeywords:"interface namespace",end:/\{/,illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]},{beginKeywords:"class",end:/\{/,illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+",contains:[{begin:"[:,]\\s*",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]}]}]},n,a,{className:"literal",begin:"\\b(null|true|false)"},{className:"number",relevance:0,begin:"(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"}]}}return vt=t,vt}var yt,mi;function _c(){if(mi)return yt;mi=1;function t(e){const n={className:"number",begin:/[$%]\d+/},a={className:"number",begin:/\b\d+/},r={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/},i={className:"number",begin:/:\d{1,5}/};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,contains:[r,i,e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{_:["order","deny","allow","setenv","rewriterule","rewriteengine","rewritecond","documentroot","sethandler","errordocument","loadmodule","options","header","listen","serverroot","servername"]},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{scope:"punctuation",match:/\\\n/},{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",begin:/[\$%]\{/,end:/\}/,contains:["self",n]},r,a,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}return yt=t,yt}var ht,Ei;function dc(){if(Ei)return ht;Ei=1;function t(e){const n=e.regex,a=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),r={className:"params",begin:/\(/,end:/\)/,contains:["self",e.C_NUMBER_MODE,a]},i=e.COMMENT(/--/,/$/),s=e.COMMENT(/\(\*/,/\*\)/,{contains:["self",i]}),o=[i,s,e.HASH_COMMENT_MODE],_=[/apart from/,/aside from/,/instead of/,/out of/,/greater than/,/isn't|(doesn't|does not) (equal|come before|come after|contain)/,/(greater|less) than( or equal)?/,/(starts?|ends|begins?) with/,/contained by/,/comes (before|after)/,/a (ref|reference)/,/POSIX (file|path)/,/(date|time) string/,/quoted form/],l=[/clipboard info/,/the clipboard/,/info for/,/list (disks|folder)/,/mount volume/,/path to/,/(close|open for) access/,/(get|set) eof/,/current date/,/do shell script/,/get volume settings/,/random number/,/set volume/,/system attribute/,/system info/,/time to GMT/,/(load|run|store) script/,/scripting components/,/ASCII (character|number)/,/localized string/,/choose (application|color|file|file name|folder|from list|remote application|URL)/,/display (alert|dialog)/];return{name:"AppleScript",aliases:["osascript"],keywords:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name|0 paragraph paragraphs rest reverse running time version weekday word words year"},contains:[a,e.C_NUMBER_MODE,{className:"built_in",begin:n.concat(/\b/,n.either(...l),/\b/)},{className:"built_in",begin:/^\s*return\b/},{className:"literal",begin:/\b(text item delimiters|current application|missing value)\b/},{className:"keyword",begin:n.concat(/\b/,n.either(..._),/\b/)},{beginKeywords:"on",illegal:/[${=;\n]/,contains:[e.UNDERSCORE_TITLE_MODE,r]},...o],illegal:/\/\/|->|=>|\[\[/}}return ht=t,ht}var Dt,gi;function uc(){if(gi)return Dt;gi=1;function t(e){const n=e.regex,a="[A-Za-z_][0-9A-Za-z_]*",r={keyword:["break","case","catch","continue","debugger","do","else","export","for","function","if","import","in","new","of","return","switch","try","var","void","while"],literal:["BackSlash","DoubleQuote","ForwardSlash","Infinity","NaN","NewLine","PI","SingleQuote","Tab","TextFormatting","false","null","true","undefined"],built_in:["Abs","Acos","All","Angle","Any","Area","AreaGeodetic","Array","Asin","Atan","Atan2","Attachments","Average","Back","Bearing","Boolean","Buffer","BufferGeodetic","Ceil","Centroid","ChangeTimeZone","Clip","Concatenate","Console","Constrain","Contains","ConvertDirection","ConvexHull","Cos","Count","Crosses","Cut","Date|0","DateAdd","DateDiff","DateOnly","Day","Decode","DefaultValue","Densify","DensifyGeodetic","Dictionary","Difference","Disjoint","Distance","DistanceGeodetic","DistanceToCoordinate","Distinct","Domain","DomainCode","DomainName","EnvelopeIntersects","Equals","Erase","Exp","Expects","Extent","Feature","FeatureInFilter","FeatureSet","FeatureSetByAssociation","FeatureSetById","FeatureSetByName","FeatureSetByPortalItem","FeatureSetByRelationshipClass","FeatureSetByRelationshipName","Filter","FilterBySubtypeCode","Find","First|0","Floor","FromCharCode","FromCodePoint","FromJSON","Front","GdbVersion","Generalize","Geometry","GetEnvironment","GetFeatureSet","GetFeatureSetInfo","GetUser","GroupBy","Guid","HasKey","HasValue","Hash","Hour","IIf","ISOMonth","ISOWeek","ISOWeekday","ISOYear","Includes","IndexOf","Insert","Intersection","Intersects","IsEmpty","IsNan","IsSelfIntersecting","IsSimple","KnowledgeGraphByPortalItem","Left|0","Length","Length3D","LengthGeodetic","Log","Lower","Map","Max","Mean","MeasureToCoordinate","Mid","Millisecond","Min","Minute","Month","MultiPartToSinglePart","Multipoint","NearestCoordinate","NearestVertex","NextSequenceValue","None","Now","Number","Offset","OrderBy","Overlaps","Point","PointToCoordinate","Polygon","Polyline","Pop","Portal","Pow","Proper","Push","QueryGraph","Random","Reduce","Relate","Replace","Resize","Reverse","Right|0","RingIsClockwise","Rotate","Round","Schema","Second","SetGeometry","Simplify","Sin","Slice","Sort","Splice","Split","Sqrt","StandardizeFilename","StandardizeGuid","Stdev","SubtypeCode","SubtypeName","Subtypes","Sum","SymmetricDifference","Tan","Text","Time","TimeZone","TimeZoneOffset","Timestamp","ToCharCode","ToCodePoint","ToHex","ToLocal","ToUTC","Today","Top|0","Touches","TrackAccelerationAt","TrackAccelerationWindow","TrackCurrentAcceleration","TrackCurrentDistance","TrackCurrentSpeed","TrackCurrentTime","TrackDistanceAt","TrackDistanceWindow","TrackDuration","TrackFieldWindow","TrackGeometryWindow","TrackIndex","TrackSpeedAt","TrackSpeedWindow","TrackStartTime","TrackWindow","Trim","TypeOf","Union","Upper","UrlEncode","Variance","Week","Weekday","When|0","Within","Year|0"]},i=["aggregatedFeatures","analytic","config","datapoint","datastore","editcontext","feature","featureSet","feedfeature","fencefeature","fencenotificationtype","graph","join","layer","locationupdate","map","measure","measure","originalFeature","record","reference","rowindex","sourcedatastore","sourcefeature","sourcelayer","target","targetdatastore","targetfeature","targetlayer","userInput","value","variables","view"],s={className:"symbol",begin:"\\$"+n.either(...i)},o={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},_={className:"subst",begin:"\\$\\{",end:"\\}",keywords:r,contains:[]},l={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,_]};_.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,o,e.REGEXP_MODE];const c=_.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{name:"ArcGIS Arcade",case_insensitive:!0,keywords:r,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,o,{begin:/[{,]\s*/,relevance:0,contains:[{begin:a+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:a,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(return)\\b)\\s*",keywords:"return",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+a+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:a},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,contains:c}]}]}],relevance:0},{beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{className:"title.function",begin:a}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:c}],illegal:/\[|%/},{begin:/\$[(.]/}],illegal:/#(?!!)/}}return Dt=t,Dt}var Mt,Si;function pc(){if(Si)return Mt;Si=1;function t(n){const a=n.regex,r=n.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),i="decltype\\(auto\\)",s="[a-zA-Z_]\\w*::",_="(?!struct)("+i+"|"+a.optional(s)+"[a-zA-Z_]\\w*"+a.optional("<[^<>]+>")+")",l={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},d={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[n.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},n.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},p={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},E={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},n.inherit(d,{className:"string"}),{className:"string",begin:/<.*?>/},r,n.C_BLOCK_COMMENT_MODE]},m={className:"title",begin:a.optional(s)+n.IDENT_RE,relevance:0},T=a.optional(s)+n.IDENT_RE+"\\s*\\(",g=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],S=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],b=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],R=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],C={type:S,keyword:g,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:b},h={className:"function.dispatch",relevance:0,keywords:{_hint:R},begin:a.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,n.IDENT_RE,a.lookahead(/(<[^<>]+>|)\s*\(/))},I=[h,E,l,r,n.C_BLOCK_COMMENT_MODE,p,d],D={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:C,contains:I.concat([{begin:/\(/,end:/\)/,keywords:C,contains:I.concat(["self"]),relevance:0}]),relevance:0},w={className:"function",begin:"("+_+"[\\*&\\s]+)+"+T,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:C,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:i,keywords:C,relevance:0},{begin:T,returnBegin:!0,contains:[m],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[d,p]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:C,relevance:0,contains:[r,n.C_BLOCK_COMMENT_MODE,d,p,l,{begin:/\(/,end:/\)/,keywords:C,relevance:0,contains:["self",r,n.C_BLOCK_COMMENT_MODE,d,p,l]}]},l,r,n.C_BLOCK_COMMENT_MODE,E]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:C,illegal:"",classNameAliases:{"function.dispatch":"built_in"},contains:[].concat(D,w,h,I,[E,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)",end:">",keywords:C,contains:["self",l]},{begin:n.IDENT_RE+"::",keywords:C},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}function e(n){const a={type:["boolean","byte","word","String"],built_in:["KeyboardController","MouseController","SoftwareSerial","EthernetServer","EthernetClient","LiquidCrystal","RobotControl","GSMVoiceCall","EthernetUDP","EsploraTFT","HttpClient","RobotMotor","WiFiClient","GSMScanner","FileSystem","Scheduler","GSMServer","YunClient","YunServer","IPAddress","GSMClient","GSMModem","Keyboard","Ethernet","Console","GSMBand","Esplora","Stepper","Process","WiFiUDP","GSM_SMS","Mailbox","USBHost","Firmata","PImage","Client","Server","GSMPIN","FileIO","Bridge","Serial","EEPROM","Stream","Mouse","Audio","Servo","File","Task","GPRS","WiFi","Wire","TFT","GSM","SPI","SD"],_hints:["setup","loop","runShellCommandAsynchronously","analogWriteResolution","retrieveCallingNumber","printFirmwareVersion","analogReadResolution","sendDigitalPortPair","noListenOnLocalhost","readJoystickButton","setFirmwareVersion","readJoystickSwitch","scrollDisplayRight","getVoiceCallStatus","scrollDisplayLeft","writeMicroseconds","delayMicroseconds","beginTransmission","getSignalStrength","runAsynchronously","getAsynchronously","listenOnLocalhost","getCurrentCarrier","readAccelerometer","messageAvailable","sendDigitalPorts","lineFollowConfig","countryNameWrite","runShellCommand","readStringUntil","rewindDirectory","readTemperature","setClockDivider","readLightSensor","endTransmission","analogReference","detachInterrupt","countryNameRead","attachInterrupt","encryptionType","readBytesUntil","robotNameWrite","readMicrophone","robotNameRead","cityNameWrite","userNameWrite","readJoystickY","readJoystickX","mouseReleased","openNextFile","scanNetworks","noInterrupts","digitalWrite","beginSpeaker","mousePressed","isActionDone","mouseDragged","displayLogos","noAutoscroll","addParameter","remoteNumber","getModifiers","keyboardRead","userNameRead","waitContinue","processInput","parseCommand","printVersion","readNetworks","writeMessage","blinkVersion","cityNameRead","readMessage","setDataMode","parsePacket","isListening","setBitOrder","beginPacket","isDirectory","motorsWrite","drawCompass","digitalRead","clearScreen","serialEvent","rightToLeft","setTextSize","leftToRight","requestFrom","keyReleased","compassRead","analogWrite","interrupts","WiFiServer","disconnect","playMelody","parseFloat","autoscroll","getPINUsed","setPINUsed","setTimeout","sendAnalog","readSlider","analogRead","beginWrite","createChar","motorsStop","keyPressed","tempoWrite","readButton","subnetMask","debugPrint","macAddress","writeGreen","randomSeed","attachGPRS","readString","sendString","remotePort","releaseAll","mouseMoved","background","getXChange","getYChange","answerCall","getResult","voiceCall","endPacket","constrain","getSocket","writeJSON","getButton","available","connected","findUntil","readBytes","exitValue","readGreen","writeBlue","startLoop","IPAddress","isPressed","sendSysex","pauseMode","gatewayIP","setCursor","getOemKey","tuneWrite","noDisplay","loadImage","switchPIN","onRequest","onReceive","changePIN","playFile","noBuffer","parseInt","overflow","checkPIN","knobRead","beginTFT","bitClear","updateIR","bitWrite","position","writeRGB","highByte","writeRed","setSpeed","readBlue","noStroke","remoteIP","transfer","shutdown","hangCall","beginSMS","endWrite","attached","maintain","noCursor","checkReg","checkPUK","shiftOut","isValid","shiftIn","pulseIn","connect","println","localIP","pinMode","getIMEI","display","noBlink","process","getBand","running","beginSD","drawBMP","lowByte","setBand","release","bitRead","prepare","pointTo","readRed","setMode","noFill","remove","listen","stroke","detach","attach","noTone","exists","buffer","height","bitSet","circle","config","cursor","random","IRread","setDNS","endSMS","getKey","micros","millis","begin","print","write","ready","flush","width","isPIN","blink","clear","press","mkdir","rmdir","close","point","yield","image","BSSID","click","delay","read","text","move","peek","beep","rect","line","open","seek","fill","size","turn","stop","home","find","step","tone","sqrt","RSSI","SSID","end","bit","tan","cos","sin","pow","map","abs","max","min","get","run","put"],literal:["DIGITAL_MESSAGE","FIRMATA_STRING","ANALOG_MESSAGE","REPORT_DIGITAL","REPORT_ANALOG","INPUT_PULLUP","SET_PIN_MODE","INTERNAL2V56","SYSTEM_RESET","LED_BUILTIN","INTERNAL1V1","SYSEX_START","INTERNAL","EXTERNAL","DEFAULT","OUTPUT","INPUT","HIGH","LOW"]},r=t(n),i=r.keywords;return i.type=[...i.type,...a.type],i.literal=[...i.literal,...a.literal],i.built_in=[...i.built_in,...a.built_in],i._hints=a._hints,r.name="Arduino",r.aliases=["ino"],r.supersetOf="cpp",r}return Mt=e,Mt}var Lt,Ti;function mc(){if(Ti)return Lt;Ti=1;function t(e){const n={variants:[e.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),e.COMMENT("[;@]","$",{relevance:0}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+e.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 w16 w17 w18 w19 w20 w21 w22 w23 w24 w25 w26 w27 w28 w29 w30 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},n,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}return Lt=t,Lt}var xt,bi;function Ec(){if(bi)return xt;bi=1;function t(e){const n=e.regex,a=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r=/[\p{L}0-9._:-]+/u,i={className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},s={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},o=e.inherit(s,{begin:/\(/,end:/\)/}),_=e.inherit(e.APOS_STRING_MODE,{className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),c={endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",begin:r,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[i]},{begin:/'/,end:/'/,contains:[i]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[s,l,_,o,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[s,o,l,_]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},i,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/
Loading speaker view...
Upcoming
Time Click to Reset
0:00 AM
00 :00 :00
Pacing – Time to finish current slide
00 :00 :00